6078|12

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

高分求助:把单片机P0,P1,P2口的状态通过串口通讯以2进制发送给计算机,急急急! [复制链接]

下面是我试验成功的按键一次发送P1口给计算机的程序,但是实际上我需要每隔十秒钟,由单片机自动将P0,P1,P2一起发给计算机,请各位大侠指点,由于本人水平较菜,希望得到详细的汇编代码,先谢啦

org 0000h
mov scon,#40h ;选择串口工作于方式1
mov tmod,#20h ;定时器T1 设置为工作方式2,用作波特率发生器
mov tl1,#0f4h ;按照波特率为2400 计算初值
mov th1,#0f4h ;把计数初值送入常数缓冲器
mov pcon,#80h ;smod=1,波特率变成4800
setb tr1 ;启动定时器T1
;以下判断是否按键k0 按下
wait1: jb p3.4,wait1 ;k0 没有按下,等待
acall del10ms ;延时10ms 去抖动
jb p3.4,wait1 ;再次查询k0,是抖动返回
wait2: jnb p3.4,wait2 ;等待按键弹起
mov a,p1 ; p1口送到a
mov sbuf,a ;发送信息,传送的一帧信息为:0+P1+1
ajmp wait1 ;返回继续查询k0 是否按下

del10ms: mov r7,#20 ;延时10ms 子程序
del1: mov r6,#0ffh
del2: djnz r6,del2
djnz r7,del1
ret

end

最新回复

谢谢,问题解决,没有等到发送结束就发下一帧了  详情 回复 发表于 2008-12-16 14:54
点赞 关注

回复
举报

82

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我用的STC89C52RC单片机
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你还有一个定时器0

把它用上就OK了
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
我现在的问题是我只知道一次发一个口的状态,不知道怎么发3个口,10秒定时倒不是什么问题
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
帮顶
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
一次发三个字节就完了么,这也想不通???
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 jsntjhm 的回复:
我现在的问题是我只知道一次发一个口的状态,不知道怎么发3个口,10秒定时倒不是什么问题


你现在已经实现一个就好办了,
你现在去看看单片机汇编程序里面的循环

你现在把这个循环次数弄成三次就可以了

这个很容易实现的,通常是加指令和比较指令构成——毕业几个月,搞了ARM,单片机汇编在大学也不用,就忘记了,只能这么提示你了。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

8
 
有没有哪位能麻烦以下给点具体的,这些东西都忘了,要是还记得一丁点就不用来这里了,上面发一次的还是抄来的呀,但是的确等着用啊!拜托
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
org 0000h
sjmp start
org 000bh
ljmp time0

org 0030h
start:
mov sp,#70h;initialize stack
mov scon,#40h ;选择串口工作于方式1
mov tmod,#21h ;定时器T1 设置为工作方式2,用作波特率发生器 ,time0 use mode 0
mov tl1,#0f4h ;按照波特率为2400 计算初值
mov th1,#0f4h ;把计数初值送入常数缓冲器
mov th0,#3ch;
mov tl0,#0b0h; 50ms
xor a,#0ffh;
mov 20h,a ;time0 interrupt times
mov pcon,#80h ;smod=1,波特率变成4800
setb tr1 ;启动定时器T1
setb tr0; setup time0
setb ea;enable globla interrupt
setb et0;enable time0 interrup
;以下判断是否按键k0 按下
wait1: jb p3.4,wait1 ;k0 没有按下,等待
acall del10ms ;延时10ms 去抖动
jb p3.4,wait1 ;再次查询k0,是抖动返回
wait2: jnb p3.4,wait2 ;等待按键弹起
mov a,p1 ; p1口送到a
mov sbuf,a ;发送信息,传送的一帧信息为:0+P1+1
ajmp wait1 ;返回继续查询k0 是否按下

del10ms: mov r7,#20 ;延时10ms 子程序
del1: mov r6,#0ffh
del2: djnz r6,del2
djnz r7,del1
ret

time0:
nop
nop
push a;
push psw;
mov th0,#3ch;
mov tl0,#0b0h; 50ms
mov a,20h;
inc a;
cjne a,#200,ne; 10s
mov a,p0;
mov sbuf,a;
nop
nop
mov a,p1;
mov sbuf,a;
nop
nop
mov a,p2;
mov sbuf,a;
mov 20h,#00h ;reset counter
pop psw;
pop a;
reti

ne:
mov 20h,a
pop psw;
pop a;
reti

end

几年没写51汇编了,自己检查一下错误
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

10
 
帮顶
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 
感谢8楼支持,测试了一下,有一个编译错误“xor a,#0ffh;”是不是“xrl a,#0ffh”,但是改好了,编译通过,只是调试用串口调试软件只收到了p2口的数据,拜托8楼再解答一下,谢谢
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

12
 
发送太快了,把time0那里改成
time0:
nop
nop
push a;
push psw;
mov th0,#3ch;
mov tl0,#0b0h; 50ms
mov a,20h;
inc a;
cjne a,#200,ne; 10s
mov a,p0;
mov sbuf,a;
p0:
jnb ti,p0;wait for transmit complete
clr ti;
mov a,p1;
mov sbuf,a;
p1:
jnb ti,p1;wait for transmit complete
clr ti;
mov a,p2;
mov sbuf,a;
p2:
jnb ti,p2;wait for transmit complete
clr ti;
mov 20h,#00h ;reset counter
pop psw;
pop a;
reti
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

13
 
谢谢,问题解决,没有等到发送结束就发下一帧了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表