- 打卡等级:常住居民III
- 打卡总天数:153
- 最近打卡:2026-03-30 19:54:03
已绑定手机
论坛元老
- 积分
- 3422
|
发表于 2026-1-21 20:37:53
|
显示全部楼层
我手头没有陈老师的课程资料,程序要自己慢慢输入:
// $include (../comm/AI8051U.INC)
$INCLUDE (AI8051U.INC) ;包含AI8051U单片机的寄存器定义文件
ADDRT EQU 1000H
ORG 0000H
LJMP MAINT ;跳至主程序入口
ORG 0023H
LJMP UART1_ISR ;转至串行中断服务程序
MAINT: MOV SP, #80H ;设置堆栈指针
MOV SCON, #50H ;8位数据,可变波特率
ANL AUXR, #0FEH ;串口1选择定时器1为波特率发生器
ANL TMOD, #0FH ;设定定时器1为16位自动重装方式
MOV TL1, #0E8H ;设定定时初值
MOV TH1, #0FFH ;设定定时初值
CLR ET1 ;禁止定时器1中断
SETB TR1 ;启动定时器1
SETB ES ;串行口开中断
SETB EA ;开总中断
MOV DPTR,#ADDRT ;ADDRT是首址,可以使用EQU定义
MOV R0,#00H ;传送字节数初值
MOVX A,@DPTR ;取第一个发送字节
MOV SBUF,A ;启动串行口发送
SJMP $ ;等待中断
;中断服务程序
UART1_ISR: CLR TI ;将中断标志清零
CJNE R0,#7FH,LOOPT ;判断128B是否发送完,若没完,则转LOOPT
CLR ES ;全部发送完毕,禁止串行口中断
LJMP ENDT ;转中断返回
LOOPT: INC R0 ;修改字节数指针
INC DPTR ;修改地址指针,继续取下一发送数据
MOVX A,@DPTR ;取发送数据
MOV SBUF,A ;启动串行口
ENDT: RETI ;中断返回
END
|
|