AT89C51与PC机的串行通信.doc_第1页
AT89C51与PC机的串行通信.doc_第2页
AT89C51与PC机的串行通信.doc_第3页
AT89C51与PC机的串行通信.doc_第4页
AT89C51与PC机的串行通信.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中北大学信息商务学院 单片机课程设计说明书1 引言 随着计算机技术尤其是单片机微型机技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力等参数进行检测和控制PC机具有强大的监控和管理功能,而单片机则具有快速灵活的控制特点,通过PC机的RS-232串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。因此如何实现PC机与单片机之间的通讯具有非常重要的现实意义。 通过LED显示器显示的数字,了解PC机与单片机的连接成功与否。2 主要芯片 2.1 Rs-232c接口 Rs-232c标准接口是一个使用二进制进行交换的DTE(数据终端设备)与DCE(数据通信设备)之间的接口。RS-232c定义了22根信号线,采用标准的DB25芯和DB9芯两种连接器,其中最常用的信号线的功能如表1所示。 表1 RS-2C接口常用信号线功能表DB9引脚号DB引脚号符号表示传输方向功能18DCDIN载波检测23RXDIN接收数据32TXDOUT发送数据420DTROUT数据终端就绪57SG信号地66DSRIN数据装置就绪74RTSOUT请求发送85CTSIN清除发送922RIIN振铃指示 Rs-232c主要电气特性如下:不带负载时驱动器输出电平为一25V+25V;负载电阻范围为3k7k;负载电容(包括线间电容)为+3V;逻辑“1”的输入电平为一3V;逻辑“0”的输出电平为+5V+15V;逻辑“1”的输出电平为一5V一15V;输出短路电流为Start/Stop Debug Session”图标,进入程序调试环境。按F5键,顺序运行程序,调出Protues ISIS界面,在菜单栏中选择“Debug Viturl Teminal”选项,打开虚拟终端窗口,在键盘上按键,在虚拟终端窗口上会显示相应的字符。4.2 设置数据和波特率 点击“Start”按钮,出现设计的PC机串行通行界面,在“发送数据”文本框中输入要发送的数字字符串(字符串长度不超过16)。 图6 设置数据4.3 仿真结果 单片机采用Protues仿真软件进行仿真测试,由于进行软件仿真无法实现PC机程序与单片机系统通信测试,此次仿真只做单片机显示结果测试。 原程序用wave进行编辑、编译,编译之前勾选“仿真器设置”对话框“目标文件”选项卡中的“生成.Hex文件”。编译后将.hex文件下载到仿真电路的AT89C51中,点击“Play”按钮得到图。 图7 刚开始的数据 图8 中间的数据5 源程序 5.1 Pc机通信程序 STACKl SEGMENT STACK DB 256 DUP(0) STACKl END DATA SEGMENT RBU F DB 256(O) COUNT DB 256 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKl START PROC FAR PUSH DS XOR AX,AX PUSH AH MOV AX, DATA MOV DS,AX MOV AX,STACK MOV SS,AX LEA DI, RBUF / 置接收数据块首址 MOV CX, COUNT / 置接收数据块长度 MOV AL,E3H / 串口初始化:波特率9600,无校验,1位停止位,8位数据位 MOV DX,00H / 指定cOMl MOV AH,00H / 0号功能 INT 14H REPTl:: MOV AH,02H / 2号功能:接收一个字符 INT 14H / 出口参数:AL中为接收到的字符,AH中为线路状态 MOV BX ,,AX / Ax内容暂存于Bx中 MOV AL,,AH / 取线路状态至AL TEST AL,,80H / 接收成功否(D7=0)? JNZ REPTl / 不成功,重试 TEST AL,,01H / 成功,则再查接收数据就绪否(D0=1)? JZ REPT1 / 未就绪,重试 MOV AL,,BL / 取回所接收的字符 CMP AL,,EEH / 该字符是出错标志否? JE REPTl / 是,重试 MOV DI,,AL / 不是,则接收正确,保存该字符 INC DI / 指向下一个地址单元 REPT2:: MOV AH,,03H / 3号功能:检查串口状态 INT 14H MOV AL,,AH / 取线路状态至AL TEST AL,,20H /8250的发送保持器空否(D5=1)? JZ REPT2 / 不空,重试;空,则反馈该字符 REPT3:: MOV AH,01H / 1号功能:发送一个字符 INT 14H MOV AL,,AH / 取线路状态至AL TEST AL,,80H / 发送成功否(D7=0)? JNZ REPT3 / 否,重试 L00P REPTl / 数据块接收完毕否?未完,继续 START ENDP CODE ENDS END START5.2 单片机源程序Datanum equ 20h ;存放接收到的数据个数Dataadd equ 30h ;接收到的数据存放的地址ORG 0000hLJMP MAINORG 000bhLIMP t0_IntORG 0100h;主程序MAIN:MOV SP,#0fh ;从0fh开始设置堆栈MOV TMOD#22h ;T0、T1工作于自动重装载方式MOV TH1,#0fdhMOV TL1,#0fdhSETB tr1 ;晶振频率11.059Mhz,波特率设置为9600MOV SCON,#50h ;设置串行口工作于方式一MOV 50h,#40MOV 51h,#100MOV TH0,#6MOV TL0,#6 ;1s定时初始化SETB TR0 ;开定时器T0SETB ET0 ;开定时器T0中断SETB EA;开总中断MOV Datanum,#0 ;初始时接收数据的个数为0display:MOVr7,#6MOV r0,#40hcl_next:MOV r0,#0INC r0DJNZ r7,cl_next ;数据显示区初始化display0:MOV r0,#45h ;r0执行待输出的数据地址处MOV r7,#6 ;扫描次数MOV r6,#0feh ;r6存放数码管的位码,显示初始化display1:MOV p0,r6 ;P0口输出位码MOV p2,r0 ;P2口输出段码DEC r0 ;r0指向下一个待输出的段码MOV a,r6RL a ;位码左移MOV r6,aJBC ri,handle ;display_jmp:DJNZ r7,display1 ;显示未结束继续本次显示SJMP display0handle:MOV r5,sbuf ;接收握手信号CJNZ r5,#0ffh,display_jmp ;非规定的握手信号MOV sbuf,#0ffh ;应答握手信号JNB ti,$ ;等待发送结束CLR tiJNB ri,$ ;等待接受串行传输的字符个数CLR riMOV a,sbuf ;接收字符个数JZ display_JMP ;没有收到数据MOV Datanum,a ;保存新数据的个数Data_ti:SETB f0MOV r1,#dataaddData_get:JNB ri,$CLR riMOV r1,sbuf ;将数据存入数据区INC r1DJNZ acc,Data_get ;接收下一个字符LCALL asctoduan ;调用Ascii码转段码程序LJMP display;Ascii码转换成段码子程序asctoduan:MOV r1,#Dataadd ;r1指向待转换的数据MOV r2,Datanum ;r2放转换个数MOV dptr,#Duanma ;DPTR指向段码表loop:MOV a,r1 ;取转换数据CLR c ;清除借位位SUBB a,#48MOVC a,a+dptr ;取数据的段码MOV r1,aINC r1DJNZ r2,loop ;数据未转换完,继续SETB rs0 ;选用寄存器组一MOV r0,#dataaddMOV r2,datanum;SETB f0 ;新数据送入显示缓冲区CLR rs0 ;RET;定时器T0中断子程序,实现数据动态显示t0_int:DJNZ 51h,intout ;内层循环未结束退出中断程序DJNZ 50h,intout0 ;外层循环未结束退出中断程序;定时1s时间到执行移位显示操作SETB rs0 ;选用工作寄存器组一MOV 0fh,40h ;40h单元暂存MOV 40h,41hMOV 41h,42hMOV 42h,43hMOV 43h,44hMOV 44h,45h ;显示缓冲区数据左移一位JB f0,datamove ;f0=1允许移动数据,否则不允许MOV 45h,0fh ;原40h单元数据放入45h中SJMP intout1 ;退出中断程序,为下次左移做准备;将数据区中的数据移动到显示缓冲区的45h单元Datamove:MOV 45h,r0 ;将R0指向的数据区中的数据传送到显示缓冲区INC r0 ;r0指向下一个待移动的数据DJNZ r2,intout1 ;没有全部移入,退出为下次移动做准备MOV r3,datanumCINZ r3,#6,datamove0 ;不等于6时判定大于还是小于6Datamove1:CLR f0 ;等于6时不允许SJMP intout1Datamove0:JC Datamove1 ;小于6不允许MOV r0,#Dataadd ;大于6时允许再移MOV r2,Datanumintout1:CLR rs0 ;选用工作寄存器组0MOV 50h,#40intout0:MOV 51h,#100intout:RETI;段码表duanma:db 3fh,06h,5bh,4fh,66h,6dh ;0,1,2,3,4,5db 7dh,07h,7fh,6fh,77h,7ch ;6,7,8,9,A,Bdb 58h,5eh,7bh,71h,00h,40h ;C,D,E,F,(空格),-END6 课程设计体会经过几天的设计,因为计时间和任务的性质的关系,没有完全按照上述的测试方法进行测试,但经过一些简单的步骤的测试,证明本设计的串行通信的稳定性与实用性。在设计的过程中我体会到了过程的快乐和结果的喜悦。人们常常说不要看重结果,主要是过程,通过设计过程也让我深深的体会到了自己知识的匮乏和掌握的不牢固为此在将来势必要不断地继续学习与深造,为此不断地完善自我。同时通过这次设计业明白了团队合作的重要性,在设计过程和同学的配合与默契十分重要,同时也明白了实践与理论相结合的重要性,不能光学好书本上的知识,还得会将其很好的应用。 参考文献1 李长林. Visual Basic串口通信技术与典型实例M. 北京:清华大学出版社,2006.42 李朝青,刘艳玲,沈怡麟. 单片机与

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论