|
许多数据采集系统都需要用到串口,串口的特点是:占用的硬件投资少,只需要很少的信号线,可以同步传输,也可以异步传送。传输数据的格式、速率可以变化。但是抗干扰性能不好,传输距离不够。本例程主要通过实验,演示串口通信的各种设置,上位机及其单片机的软件编程方法,数据的采集与处理等。也可以作为串口调试软件用。是一个非常实用的实验。能够方便地进行代码移植。
org 00h jmp main
org 23h ;串行中断入口地址 jmp com_int ;串行中断服务程序
;*********** 主程序开始 ******************* org 30h
main:MOV sp,#30h ;设置堆栈 lcall rest ;初始化 lcall comm ;串口初始化 jmp $ ;原地等待 ; ************* 初始化 ********************* rest:MOV p0,#00h ;禁止数码管显示 MOV p2,#255 MOV p1,#255 ;禁止LED显示 RET ;返回 ;************** 串口初始化 ***************** ;设置串行口工作方式1,定时器1作为波特率发生器 ;波特率设置为 2400 ; comm:MOV tmod,#20h ;设置定时器T1工作方式2 MOV tl1,#0f2h ;定时器计数初值,波特率 2400 MOV th1,#0f2h ;定时器重装值 setb ea ;允许总的中断 setb es ;允许串行中断 MOV pcon,#00h ;波特率不倍增 MOV scon,#50h ;设置串口工作方式1,REN = 1 允许接收 setb tr1 ;定时器开始工作 ret ;返回 ;*************** 串口中断服务程序 *********** ; 如果接收 0FF 表示上位机需要联机信号,单片机发送 0FFH作为 ; 应答信号,如果接收到 数字 1~ n,表示相应的功能; ; 这里,如果收到 1 ,则单片机向计算机发送字符 'm'; ; 如果收到 2 ,则单片机向计算机发送字符 'c'; ; 如果收到其他的数据,则发送 'u'; com_int:clr es ;禁止串行中断 clr ri ;清除接收标志位 MOV a,sbuf ;从缓冲区取出数据 cjne a,#0ffh,in_1 ;检查数据 MOV sbuf,#255 ;收到联机信号,发送联机信号 jnb ti,$ ;等待发送完毕 clr ti ;清除发送标志 setb es ;允许串行中断 reti ;中断返回 in_1:cjne a,#01,in_2 ;如果收到1 MOV sbuf,'m' ;发送 'm' jnb ti,$ ;等待发送完毕 clr ti ;清除发送中断标志 setb es ;允许串行中断 reti ;中断返回 in_2:cjne a,#02,in_3 ;接收到 2 MOV sbuf,'c' ;发送 'c' jnb ti,$ ;等待发送完毕 clr ti ;清除发送中断 setb es ;允许串行中断 reti ;中断返回 in_3:MOV sbuf,'u' ;收到其他数据,发送'u' jnb ti,$ ;等待发送完毕 clr ti ;清除发送中断标志 setb es ;允许串行中断 reti ;返回 end |