单片机 串口 问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 14:27:25
我做了一个写了一个单片机串口的程序,就是利用一秒钟中断,读取T0的数据。然后通过串口发送给电脑,但是电脑的串口调试助手没有反应,怎么回事,是不是程序编的太幼稚了,麻烦高手给看看,不吝惜给加分啊

ORG 0000H
AJMP START
ORG 1BH
LJMP TIME1 ;定时中断1入口
ORG 0040H

START: MOV SP,#60H
MOV TMOD,#00010101B ;定时器T1工作于方式1,定时器。定时器T0工作方式1 ,计数器(改)
MOV TH1,#HIGH(65536-400)
MOV TL1,#LOW(65536-4000)
SETB TR1 ;定时一秒
SETB ET1 ;开定时器1中断
SETB EA
ss: sjmp ss
TIME1: PUSH ACC;ACC入栈
PUSH PSW ;PSW入栈

GO1: CLR TR0 ;1s到了,则停止T0的运行
MOV A,TL0 ;读取计数值
MOV SCON,#50H ;串口 方式 1
MOV TMOD,#20H ;T1 模式2
MOV TL1,#0FDH ;波特率 9600 的常数
MOV

首先检查你的硬件问题,比如232的连接等,
你的程序我大概看了下,你的定时器T0并没有给他附初使值啊,只有当中断发生后才由A给他,还有T0如果工作在方式1下也会产生中断!!这里估计是问题所在,但是你没有给T0留出中断地址,只给T1留了。还有1点你也没有开T0定时器!!!
一没有开T0二没有给T0附初始值三没有T0中断地址及中断源
还有你的程序T1我没有细算是多少因为你的晶震也没有说明,我个人记的,51系列的单片机晶震在6~11。052甚至12M是没有一个定时器可以做到一次性定时时间达到1秒的,何况你的T1初值还不是0,12M的晶体在初值为0的情况下也不过65毫秒,6M的话也不过130毫秒,你怎么来的1秒?
另外串口通讯你目前用的这个方法也是要用中断的,你要注意,你的串口也没有留出中断和地址。
还是好好看看书重新写个吧~
你自己试下这个程序,我没有实验不知还有没有问题有的话在联系我吧:
;晶振频率按11.0592M计算
MS EQU 25H
ORG 00H
LJMP MAIN
ORG 0BH
LJMP TIM0
ORG 1BH
LJMP TIM1
ORG 23H
LJMP UATR

ORG 30H
MAIN:MOV SP,#50H
MOV MS,#00H
MOV TH0,00H ;给计数器清零
MOV TL0,00H
MAIN1:MOV TMOD,#00010101B
MOV TH1,4CH
MOV TL1,00H ;定时器1设定的定时时间为50MS中断一次
SETB EA
SETB ET0
SETB ET1
SETB TR0
SETB TR1
SS: SJMP SS
;定时器1中断程序,延时1秒程序
TIM1:PUSH ACC
PUSH PSW
CLR TR1