网上找不到STC15W204S STC15W201S 的串口汇编程序 STC提供的范例程序也没用 琢磨了一天才会使用P3.0P3.1串口 现在把程序分享出来用 串口助手软件发送1 返回文本123456789
单片机源程序如下:
- //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
- //若无特别说明,工作频率一般为11.0592MHz
- ;#define NONE_PARITY 0 //无校验
- ;#define ODD_PARITY 1 //奇校验
- ;#define EVEN_PARITY 2 //偶校验
- ;#define MARK_PARITY 3 //标记校验
- ;#define SPACE_PARITY 4 //空白校验
- ;#define PARITYBIT NONE_PARITY //定义校验位
- //-----------------------------------------
- ;P0M1 DATA 0x93 ; P0M1.n,P0M0.n =00--->Standard, 01--->push-pull
- ;P0M0 DATA 0x94 ; =10--->pure input, 11--->open drain
- P1M1 DATA 0x91 ; P1M1.n,P1M0.n =00--->Standard, 01--->push-pull
- P1M0 DATA 0x92 ; =10--->pure input, 11--->open drain
- ;P2M1 DATA 0x95 ; P2M1.n,P2M0.n =00--->Standard, 01--->push-pull
- ;P2M0 DATA 0x96 ; =10--->pure input, 11--->open drain
- P3M1 DATA 0xB1 ; P3M1.n,P3M0.n =00--->Standard, 01--->push-pull
- P3M0 DATA 0xB2 ; =10--->pure input, 11--->open drain
- ;P4M1 DATA 0xB3 ; P4M1.n,P4M0.n =00--->Standard, 01--->push-pull
- ;P4M0 DATA 0xB4 ; =10--->pure input, 11--->open drain
- P5M1 DATA 0xC9 ; P5M1.n,P5M0.n =00--->Standard, 01--->push-pull
- P5M0 DATA 0xCA ; =10--->pure input, 11--->open drain
- P5 EQU 0C8H;
- ;P6M1 DATA 0xCB ; P6M1.n,P6M0.n =00--->Standard, 01--->push-pull
- ;P6M0 DATA 0xCC ; =10--->pure input, 11--->open drain
- ;P7M1 DATA 0xE1 ;
- ;P7M0 DATA 0xE2 ;
- AUXR EQU 08EH //辅助寄存器
- T2H DATA 0D6H //定时器2高8位
- T2L DATA 0D7H //定时器2低8位
- P_SW1 EQU 0A2H //外设功能切换寄存器1
- S1_S0 EQU 40H //P_SW1.6
- S1_S1 EQU 80H //P_SW1.7
- BUSY BIT 20H.0 //忙标志位
- //-----------------------------------------
- ORG 0000H
- LJMP MAIN
- ORG 0023H
- LJMP UART_ISR
- //-----------------------------------------
- ORG 0100H
- MAIN:
- CLR A
- ; MOV P0M1, A ;设置为准双向口
- ; MOV P0M0, A
- MOV P1M1, A ;设置为准双向口
- MOV P1M0, A
- ; MOV P2M1, A ;设置为准双向口
- ; MOV P2M0, A
- MOV P3M1, A ;设置为准双向口
- MOV P3M0, A
- ; MOV P4M1, A ;设置为准双向口
- ; MOV P4M0, A
- MOV P5M1, A ;设置为准双向口
- MOV P5M0, A
- ; MOV P6M1, A ;设置为准双向口
- ; MOV P6M0, A
- ; MOV P7M1, A ;设置为准双向口
- ; MOV P7M0, A
- CLR BUSY;
- CLR EA;
- MOV SP,#3FH;
-
- MOV A,P_SW1;
- ANL A,#03FH; //S1_S0=0 S1_S1=0
- MOV P_SW1,A; //(P3.0/RxD, P3.1/TxD)
- //-------------------------------
- MOV SCON,#50H ; //8位可变波特率
- ORL AUXR,#04H ;定时器2时钟为Fosc,即1T
- ORL AUXR,#01H ;串口1选择定时器2为波特率发生器 9600
- MOV T2L,#0E0H ;设定定时初值 9600
- MOV T2H,#0FEH ;设定定时初值
- ORL AUXR,#10H ;启动定时器2
- SETB ES; //使能串口中断
- SETB EA;
- SJMP $
- TXDAT:
- MOV DPTR,#TESTSTR; //发送测试字符串
- MOV R4,#9;
- LCALL TABS; 查表
- RETI
- ; SJMP $
- ;-----------------------------------------
- TESTSTR:
- DB "123456789"
- ;/*----------------------------
- ;UART 中断服务程序
- ;----------------------------*/
- UART_ISR:
- PUSH ACC;
- PUSH PSW;
- JNB RI,CHECKTI; //检测RI位
- CLR RI; //清除RI位
- MOV A,SBUF; //P0显示串口数据
- CJNE A,#1,RXOUT;
- LJMP TXDAT;
- CHECKTI:
- JNB TI,ISR_EXIT; //检测TI位
- CLR TI; //清除TI位
- CLR BUSY; //清忙标志
- ISR_EXIT:
- POP PSW;
- POP ACC;
- RXOUT:
- RETI;
- ;/*----------------------------
- ;发送串口数据
- ;----------------------------*/
- SENDDATA:
- SETB BUSY;
- MOV SBUF,A; //写数据到UART数据寄存器
- JNB TI,$;
- CLR TI;
- RET;
- ;/*----------------------------
- ;发送字符串
- //------------------------------------------------------------------------------
- TABS:
- DDD: CLR A;
- MOVC A,@A+DPTR;
- INC DPTR;
- LCALL SENDDATA; //发送当前字符
- DJNZ R4,DDD;
- RET;
- END;
复制代码
以上资料51hei提供下载:
15W204S串口测试程序 - 汇编.rar
(22.27 KB, 下载次数: 30)
|