文档详情

单片机第七章串行通信详解.ppt

发布:2016-11-01约1.09万字共41页下载文档
文本预览下载声明
实验:串行口自发自收程序 (方式0)例2用8031串行口外接CD4049或164串入并出移位寄存器扩展8位并行口;8位并行口的每位都接一个发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断循环。 解:设数据串行发送采用中断方式,显示的延迟通过调用延迟程序DELAY实现. 程序清单: ORG 0023H  ;串行口中断入口 AJMP SBR ;转入串行口中断服务程序 0RG 2000H ;主程序起始地 MOV SCON,#00H ;串行口方式0初始化 MOV A,#80H ;最左一位发光二极管先亮 CLR P1.0 ;关闭并行输出 MOV SBUF,A ;启动串口串行输出 LOOP: SJMP $   ;等待中断 SBR: SETB P1.0   ;启动寄存器并行输出 ACALL DELAY ;显示延迟一段时间 CLR TI ;清发送中断标志  RR A ;准备右边一位显示 CLR P1.0 ;关闭并行输出 MOV SBUF,A ;再一次串行输出 RETI  ;中断返回 图7-13 串入并出电路  双机通信。甲机发送,乙机接收,进行单工串行异步通讯。 (方式1)例3 甲机从片内RAM 30H~39H单元逐个取出共10个ASCII码数据,在D7位补奇后由串行口发送出去,乙机每接收一个数据都有奇/偶校验,然后存入30H~39H单元。若奇/偶校验有错,则将FFH存入相应单元,设波特率为1200b/s,fosc=6MHZ。     0RG 0000H     LJMP MAINT     ORG 0100H MAINT: MOV SCON,#40H  ;方式1串行发送     MOV TMOD,#20H ;(TMOD)←20H,T1方式2     MOV TH1, #0F3H ;(T1)←F3F3H,T1初值     MOV TL1, #0F3H     SETB TR1 ;启动T1      1.甲机发送程序 把片内RAM 30H~39H中的数据块通过串行口TXD引脚输出。参考程序如下: 图6-15 双机通信电路 CLR ET1 ;禁止T1中断      MOV R0, #30H ;R0:发送数据首址,(R0)←30H L1: MOV A,@R0      MOV C,P ;设置奇偶校验位(补奇)      CPL C      MOV ACC.7,C      MOV SBUF, A ;启动发送 L2: JBC TI,L3 ;若TI=1,则转L3执行且(T1)←0      SJMP L2 ;TI=0,一帧未完,连续发送 L3: INC R0 ;取下一数据      CJNE R0,#3AH,L1 ;若10个数据未完,转L1执行      SJMP $      END ORG 0000H LJMP MAINR 0RG 0200H MAINR:MOV SCON, #50H   ;启动接收 MOV TMOD, #20H ;(TMOD)=20H,T1方式2 MOV TH1, #0F3H ;(T1)=F3F3H,Tl初值 MOV TL1, #0F3H SETB TR1 ;启动T1 CLR ET1 ;禁止T1中断 2. 乙机接收程序 乙机通过RXD引脚接收甲机发送的串行字节,波特率必须与甲机相同,乙机fosc=6MHZ,波特率为1200b/s,采用定时器T1方式2,初值同为0F3H。参考程序如下:   MOV R0, #30H ;R0:接收数据首址,(R0)←30H L4:JBC RI,L5      ;若RI=1,则转L5执行且(RI)←0   SJMP L4
显示全部
相似文档