串口通信汇编程序问题,有代码和注释,请高手入....

jialejiahi 2010-10-11 07:31:35
测试时不管电脑发什么,单片机总是发回CA,到底为什么?代码如下:

/*-------------------------------------------------------------------
stc89c51rc单片机,24M晶振,在stc isp自带的串口调试助手上测试

程序目的是实现从pc发送字符1,2,3,单片机发回相应的字母h,e,j
-----------------------------------------------------------------------*/
ORG 0000H

LJMP MAIN

ORG 0023H

LJMP SINT ;串行中断服务

ORG 0030H

MAIN:

MOV SP, #70H

LCALL COMRE ;串口初始化

SJMP $

COMRE: ;设置串口工作方式1,定时器1作为波特率发生器,波特率设置4800

MOV TMOD, #20H ;定时器T1工作方式2


MOV TH1, #0F3H

MOV TL1, TH1

SETB EA ;开总终端和串行中断

SETB ES

MOV PCON, #00H ;波特率不倍增

MOV SCON, #50H ;串口工作方式1,REN=1,允许接收

SETB TR1

RET

SINT:


CLR ES ;禁止串行中断

CLR RI ;清接受标志位

MOV A, SBUF


MOV DPTR, #TABLE

CJNE A, #0FH, IN1 ;检查数据

MOV SBUF, #0FFH ;收到联机信号,发回联机信号

JNB TI, $ ;等待发送完毕

CLR TI ;清发送标志位

SETB ES ;重开中断

RETI ;中断返回

IN1:

CJNE A, #01H, IN2 ;判断是否收到1

MOVC A, @A+DPTR ;查找表中相应的字符

MOV SBUF, A ;发送h

JNB TI, $

CLR TI

SETB ES

RETI

IN2:

CJNE A, #02H, IN3 ;下面与收到1是处理方法相同

MOVC A, @A+DPTR

MOV SBUF, A

JNB TI, $

CLR TI

SETB ES

RETI

IN3:

MOV A, #03H

MOVC A, @A+DPTR

MOV SBUF, A

JNB TI, $

CLR TI

SETB ES

RETI

TABLE: DB '2', 'h', 'e', 'j'

END
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jialejiahi 2010-10-12
  • 打赏
  • 举报
回复
还有,这个程序不是网上抄的,尽管网上抄也没什么不好,呵呵
jialejiahi 2010-10-12
  • 打赏
  • 举报
回复
非常感谢各位的回答!
的确是晶振的问题,我的晶振是22.1184Mhz的,根据24M算的,改完就正常了。
丰满 2010-10-12
  • 打赏
  • 举报
回复
嗯,是啊,看看你的波特率是不是和作者的一样
主要是晶振和算法
lbing7 2010-10-12
  • 打赏
  • 举报
回复
LZ,还在关注一下你的晶体,是不是和原作者用的一样
wackestar 2010-10-12
  • 打赏
  • 举报
回复
你这个设置的波特率是4807,你是用这个波特率吗?
wackestar 2010-10-11
  • 打赏
  • 举报
回复
应该是你的波特率算的不对。程序别的地方没什么问题。检测一下初始化的地方。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧