您的位置:首页单片机51单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

单片机串行通讯应用程序

[日期:2008-05-23 ] [来源:net 作者:佚名] [字体: (投递新闻)

许多数据采集系统都需要用到串口,串口的特点是:占用的硬件投资少,只需要很少的信号线,可以同步传输,也可以异步传送。传输数据的格式、速率可以变化。但是抗干扰性能不好,传输距离不够。本例程主要通过实验,演示串口通信的各种设置,上位机及其单片机的软件编程方法,数据的采集与处理等。也可以作为串口调试软件用。是一个非常实用的实验。能够方便地进行代码移植。 
 

       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

 
阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
赞助商广告