89C51 单片机 IO 口模拟串行通信的实现方法
- 格式:doc
- 大小:54.50 KB
- 文档页数:5
单片机期末考试试题01、单片机是将微处理器、一定容量的RAM 和ROM以及I/O口、定时器等电路集成在一块芯片上而构成的微型计算机。
2、单片机89C51片内集成了 4 KB的FLASH ROM,共有 5 个中断源。
3、两位十六进制数最多可以表示256 个存储单元。
4、89C51是以下哪个公司的产品?( C )A、INTELB、AMDC、ATMELD、PHILIPS5、在89C51中,只有当EA引脚接高电平时,CPU才访问片内的Flash ROM。
6、是非题:当89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片内是否有程序存储器。
T7、是非题:当89C51的EA引脚接高电平时,CPU只能访问片内的4KB空间。
F8、当CPU访问片外的存储器时,其低八位地址由P0 口提供,高八位地址由P2 口提供,8位数据由P0 口提供。
9、在I/O口中,P0 口在接LED时,必须提供上拉电阻,P3 口具有第二功能。
10、是非题:MCS-51系列单片机直接读端口和读端口锁存器的结果永远是相同的。
F11、是非题:是读端口还是读锁存器是用指令来区别的。
T12、是非题:在89C51的片内RAM区中,位地址和部分字节地址是冲突的。
F13、是非题:中断的矢量地址位于RAM区中。
F14、MCS-51系列单片机是属于( B )体系结构。
A、冯诺依曼B、普林斯顿C、哈佛D、图灵15、89C51具有64 KB的字节寻址能力。
16、是非题:在89C51中,当CPU访问片内、外ROM区时用MOVC指令,访问片外RAM 区时用MOVX指令,访问片内RAM区时用MOV指令。
T17、在89C51中,片内RAM分为地址为00H~7FH 的真正RAM区的地址为80H~FFH 的特殊功能寄存器(SFR) 区两个部分。
18、在89C51中,通用寄存器区共分为 4 组,每组8 个工作寄存器,当CPU 复位时,第0 组寄存器为当前的工作寄存器。
单片机期末考试试题库及答案01、单片机是将微处理器、一定容量的 RAM 和ROM以及 I/O 口、定时器等电路集成在一块芯片上而构成的微型计算机。
2、单片机89C51片内集成了 4 KB的FLASH ROM,共有 5 个中断源。
3、两位十六进制数最多可以表示 256 个存储单元。
4、89C51是以下哪个公司的产品?( C )A、INTELB、AMDC、ATMELD、PHILIPS5、在89C51中,只有当EA引脚接高电平时,CPU才访问片内的Flash ROM。
6、是非题:当89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片内是否有程序存储器。
T7、是非题:当89C51的EA引脚接高电平时,CPU只能访问片内的4KB空间。
F8、当CPU访问片外的存储器时,其低八位地址由 P0 口提供,高八位地址由 P2 口提供,8位数据由 P0 口提供。
9、在I/O口中, P0 口在接LED时,必须提供上拉电阻, P3 口具有第二功能。
10、是非题:MCS-51系列单片机直接读端口和读端口锁存器的结果永远是相同的。
F11、是非题:是读端口还是读锁存器是用指令来区别的。
T12、是非题:在89C51的片内RAM区中,位地址和部分字节地址是冲突的。
F13、是非题:中断的矢量地址位于RAM区中。
F14、MCS-51系列单片机是属于( B )体系结构。
A、冯诺依曼 B、普林斯顿 C、哈佛 D、图灵15、89C51具有 64 KB的字节寻址能力。
16、是非题:在89C51中,当CPU访问片内、外ROM区时用MOVC指令,访问片外RAM区时用MOVX指令,访问片内RAM区时用MOV指令。
T17、在89C51中,片内RAM分为地址为 00H~7FH 的真正RAM区,和地址为80H~FFH的特殊功能寄存器(SFR) 区两个部分。
18、在89C51中,通用寄存器区共分为 4 组,每组 8 个工作寄存器,当CPU复位时,第 0 组寄存器为当前的工作寄存器。
单片机IO口模拟串口程序(发送+接收)前一阵一直在做单片机的程序,由于串口不够,需要用10 口来模拟出一个串口。
经过若干曲折并参考了一些现有的资料,基本上完成了。
现在将完整的测试程序,以及其中一些需要总结的部分贴出来。
程序硬件平台:11.0592M 晶振,STC 单片机(兼容51) /*************************************************************** * 在单片机上模拟了一个串口,使用P2.1作为发送端* 把单片机中存放的数据通过P2.1作为串口TXD 发送出去***************************************************************/#in elude #i nclude #in clude typedef unsigned char uchar; int i;uchar code in fo[]= {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x 55,0x55,0x55,0x5 5 };// SCON: serail mode 1,8-bit UART // T0工作在方式1,十六位定时 // SMOD=1;0xFE; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率为2400bps fosc=11.0592MHz TL0 = 0x7F; II 2400bps fosc=11.0592MHz II TH0= 0xFD; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率为 2400bps fosc=18.432MHzII TL0 = 0x7F; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率为 2400bps fosc=18.432MHz }void WaitTF0( void ) {sbit n ewTXD = P2A 1;〃模拟串口的发送端设为 P2.1 void Uartlnit() {SCON = 0x50; TMOD |= 0x21;PCON |= 0x80; TH0 定时器0初始值,延时417us ,目的是令模拟串口的波特率为TFO=O; THO=OxFE; // 定时器重装初值fosc=11.0592MHz TL0=0x7F; // 定时器重装初值 fosc=11.0592MHzvoid WByte(uchar in put) {//发送启始位 uchar j=8; TR0=1; newTXD=(bit)O; WaitTF0();//发送8位数据位 while (j--) {newTXD=(bit)(i nput&0x01); WaitTF0(); in put= in put>>1; } //发送校验位(无) //发送结束位n ewTXD=(bit)1; WaitTF0(); TR0=0; }void Sendata() {for (i=0;i<="">WByte(i nfo[i]); } }void main() {UartI nit(); while (1) {// TH0 =0xFD; //TL0=0x7F;// }// 定时器重装初值fosc=18.432MHz 定时器重装初值fosc=18.432MHz//先传低位//外层循环,遍历数组}}II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II IIa a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a/************************************************************** ** 模拟接收程序,这个程序的作用从模拟串口接收数据,然后将这些数据发送到实际串口* 在单片机上模拟了一个串口,使用P3.2作为发送和接收端* 以P3.2模拟串口接收端,从模拟串口接收数据发至串口*************************************************************** /#in elude#i nclude#in cludetypedef unsigned char uchar ;//这里用来切换晶振频率,支持11.0592MHz 和18.432MHz//#defi ne F18_432#defi ne F11_0592uchar tmpbuf2[64]={0};//用来作为模拟串口接收数据的缓存struct{uchar recv :6 ;//tmpbuf2 数组下标,用来将模拟串口接收到的数据存放到tmpbuf2中uchar send :6 ;//tmpbuf2 数组下标,用来将tmpbuf2中的数据发送到串口}tmpbuf2_poi nt={0,0};sbit newRXD=P3A2 ; //模拟串口的接收端设为P3.2void Uartl nit(){SCON=0x50 ; // SCON: serail mode 1, 8-bit UARTTMOD|=0x21 ; // TMOD: timer 1, mode 2, 8-bit reload, 自动装载预置数(自动将TH1 送到TL1);T0工作在方式1,十六位定时PCON|=0x80 ;// SMOD=1;#ifdef F11_0592TH1=0xE8 ; // Baud:2400 fosc=11.0592MHz 2400bps 为从串口接收数据的速率TL1=0xE8 ;//计数器初始值,fosc=11.0592MHz 因为TH1 一直往TL1送,所以这个初值的意义不大THO=OxFF ;//定时器0初始值,延时208us,目的是令模拟串口的波特率为9600bpsfosc=11.0592MHzTL0=0xA0 ; //定时器0初始值,延时208us,目的是令模拟串口的波特率为9600bps fosc=11.0592MHz#en dif#ifdef F18_432TH 仁0xD8 ; // Baud:2400 fosc=18.432MHz 2400bps 为从串口接收数据的速率TL1=0xD8 ; // 计数器初始值,fosc=18.432MHz 因为TH1 一直往TL1送,所以这个初值的意义不大TH0=0xFF ; //定时器0初始值,延时104us,目的是令模拟串口的波特率为9600bps fosc=18.432MHzTL0=0x60 ;//定时器0初始值,延时104us,目的是令模拟串口的波特率为9600bps fosc=18.432MHz#en difIE|=0x81 ;//中断允许总控制位EA=1;使能外部中断0TF0=0 ;IT0=1 ;//设置外部中断0为边沿触发方式TR1=1 ;//启动TIMER1,用于产生波特率}void WaitTF0( void ){while (!TF0);TF0=0 ;#ifdef F11_0592TH0=0xFF ; // 定时器重装初值模拟串口的波特率为9600bps fosc=11.0592MHz TL0=0xA0 ; // 定时器重装初值模拟串口的波特率为9600bps fosc=11.0592MHz #en dif#ifdef F18_432TH0=0xFF ;//定时器重装初值fosc=18.432MHzTL0=0x60 ;//定时器重装初值fosc=18.432MHz#en dif}//接收一个字符uchar RByte(){uchar Output=0 ;#ifdef F11_0592THO=OxFF ; //定时器重装初值 TLO=OxAO ; // 定时器重装初值#en dif #ifdef F18_432TH0=0xFF ; // 定时器重装初值fosc=18.432MHzTL0=0x60 ;// 定时器重装初值 fosc=18.432MHz #en difTF0=0 ;WaitTF0(); //等过起始位 //接收8位数据位 while (i--) {Output>>=1 ;if (newRXD)0utput|=0x80 ; // 先收低位WaitTF0(); //位间延时}TR0=0 ; // 停止 Timer0 return Output ; }//向COM1发送一个字符void Sen dChar(uchar byteToSe nd) {SBUF=byteToSe nd ; while (!TI); TI=0 ; }void mai n() {UartI nit(); while (1) {if (tmpbuf2_point.recv!=tmpbuf2_point.send) //差值表示模拟串口接收数据缓存中还有多少个字节的数据未被处理(发送至串口){Sen dChar(tmpbuf2[tmpbuf2_poi nt.se nd++]);uchar i=8 ; TR0=1 ;// 启动 TimerO模拟串口的波特率为 9600bps fosc=11.0592MHz 模拟串口的波特率为 9600bps fosc=11.0592MHz}}}//夕卜部中断0,说明模拟串口的起始位到来了void Simulated_Serial_Start()interrupt 0{EX0=0 ; //屏蔽外部中断0tmpbuf2[tmpbuf2_point.recv++]=RByte(); // 从模拟串口读取数据,存放到tmpbuf2 数组中IE0=0 ; //防止外部中断响应2次,防止外部中断函数执行2次EX0=1 ; //打开外部中断0}以上是两个独立的测试程序,分别是模拟串口发送的测试程序和接收的测试程序上面两个程序在编写过程中参考了这篇文章《51单片机模拟串口的三种方法》(在后文中简称《51》),但在它的基础上做了一些补充,下面是若干总结的内容:1、《51》在接收数据的程序中,采用的是循环等待的方法来检测起始位(见《51》的附:51 10 口模拟串口通讯C源程序(定时器计数法)”部分),这种方法在较大程序中,可能会错过起始位(比如起始位到来的时候程序正好在干别的,而没有处于判断起始位到来的状态),或者一直在检测起始位,而没有办法完成其他工作。
单片机原理及应用A-题库1、单片机就是把(CPU)、( 输入输出)、和( 存储器 )等部件都集成在一个电路芯片上,并具备一套功能完善的( 指令系统 ),有的型号同时还具备( AD )和( DA )等功能部件,其简称为( 微处理器 )或(微控制器)。
2、当扩展外部存储器或I/O口时,P2口用作(地址线的高8位)。
3、MCS-51单片机内部RAM区有(4)个工作寄存器区。
4、MCS-51单片机内部RAM区有128个位地址5、若不使用89C51片内的程序存储器,引脚()需要接地。
6、当MCS-51引脚(ALE)信号有效时,表示从P0口稳定地送出了低8位地址.7、在单片机的RESET端出现(2)个机器周期以上的高电平时,便可以可靠复位8、MCS-51系列单片机有:(外部中断0), (外部中断1), (定时/计数器T0溢出中断),(定时/计数器T1溢出中断), (串行口)等5个中断请求源。
9、C51中“!”运算符的作用是(取反)10、所谓的单片机,就是将CPU、存储器、定时计数器、中断功能以及I/O设备等主要功能部件都集成在一块超大规模集成电路的微型计算机。
(正确)11、8051单片机,程序存储器数和数据存储器扩展的最大范围都是一样的。
(正确)12、8位二进制数构成一个字节,一个字节所能表达的无符号数的范围是0-255。
(正确)13、8051中的工作寄存器就是内部RAM中的一部份。
(正确)14、使用89C51且 =0时,可外扩64KB的程序存储器。
(错误)15、因为MCS-51 可上电复位,因此,MCS-51系统也可以不需要复位电路。
(错误)16、一个函数利用return可同时返回多个值。
(错误)17、89C51每个中断源相应地在芯片上都有其中断请求输入引脚。
(错误)18、中断初始化时,对中断控制器的状态设置,只可使用位操作指令,而不能使用字节操作指令。
(错误)19、89C51单片机五个中断源中优先级是高的是外部中断0,优先级是低的是串行口中断。
单片机期末考试试题(答案)01、单片机是将微处理器、一定容量的RAM 和ROM以及I/O 口、定时器等电路集成在一块芯片上而构成的微型计算机。
2、单片机89C51片集成了 4 KB的FLASH ROM,共有 5 个中断源。
3、两位十六进制数最多可以表示256 个存储单元。
4、89C51是以下哪个公司的产品?( C )A、INTELB、AMDC、ATMELD、PHILIPS5、在89C51中,只有当EA引脚接高电平时,CPU才访问片的Flash ROM。
6、是非题:当89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片是否有程序存储器。
T7、是非题:当89C51的EA引脚接高电平时,CPU只能访问片的4KB空间。
F8、当CPU访问片外的存储器时,其低八位地址由P0 口提供,高八位地址由P2 口提供,8位数据由P0 口提供。
9、在I/O口中,P0 口在接LED时,必须提供上拉电阻,P3 口具有第二功能。
10、是非题:MCS-51系列单片机直接读端口和读端口锁存器的结果永远是相同的。
F11、是非题:是读端口还是读锁存器是用指令来区别的。
T12、是非题:在89C51的片RAM区中,位地址和部分字节地址是冲突的。
F13、是非题:中断的矢量地址位于RAM区中。
F14、MCS-51系列单片机是属于( B )体系结构。
A、冯诺依曼B、普林斯顿C、哈佛D、图灵15、89C51具有64 KB的字节寻址能力。
16、是非题:在89C51中,当CPU访问片、外ROM区时用MOVC指令,访问片外RAM 区时用MOVX指令,访问片RAM区时用MOV指令。
T17、在89C51中,片RAM分为地址为00H~7FH 的真正RAM区,和地址为80H~FFH 的特殊功能寄存器(SFR) 区两个部分。
18、在89C51中,通用寄存器区共分为 4 组,每组8 个工作寄存器,当CPU 复位时,第0 组寄存器为当前的工作寄存器。
飞利浦P89C51系列单片机简介文/邢矫健舞P89C51系列单片机是飞利浦公司在兼容MCS-51内核结构的基础上对譬标准的MCS-51内核进行改进后推出誓的一个增强型MCS一51单片机系列.i在芯片型号命名上,P代表是Phifips的产品,89代表芯片内带有非易失性Flash程序存储器(早期还有与Intel_命名上一致的内置ROM/OTP的80系列和内置EPROM的87系列),C代表萋CMOS工艺制造.51/52/54/58代表_芯片内Flash程序存储器的容量分别为4K/8K/16K/32K,还用后缀名区.分为X2,Rx2等不同系列(Rx2系列用A/B/C/D代表Flash程序存储器的容量,见下文).《P89C51系列是从引脚到内核都完.全兼容标准8051的单片机,有40脚DIP,44脚PLCC,44脚LQFP三种.封装形式(见图1).下面,先以P89C51u系列单片机的子系列P89C51Rx2为例介绍其内核的增强功能,再介绍其他类似型号的特点.关于P89C51Rx2的详细开发资料,可上网下载:http:///acrobat/datasheets/一P89C51RB2jC2jD2_9.pdf蕞P89C51Rx2系列单片机主要分_P89C51RA2/RB2/RC2/RD2四种型.号,内核完全相同,差别主要在于片.内Flash闪存分别为8K/16K/32K/--64K,其管脚排列与标准的8051完全_酾嘲鳓adC—ShOW【3一i].=temp1O+0x30;//处理电压值,用于在LCD上显示temp:temp/10;兼容.但芯片内核较之8051有不少大的改进,下面就改进方面逐一介绍.一6时钟,机器周期模式标准的8051每个机器周期为12时钟,增强型的P89C51Rx2系列单片机可以设置工作模式为6时钟/机器周期(双倍速)或12时钟/机器周期.6时钟模式时工作频率为0到20MHz,12 时钟模式时工作频率为0到33MHz. 6时钟/机器周期(双倍速)工作模式下,定时器的计数速度会加倍,相应的12时钟/机器周期模式下的串口波特率也会加倍,因此单片机使用的最高的波特率也可提高~倍.=.片内硬件■门狗P89C51Rx2芯片内置了一个14位的硬件看门狗定时器.从而可以省去外接专用看门狗硬件,当然在不启动内置看门狗的情况下P89C51Rx2完.||l毽甄g警骜l|孽l囊沓薯簪毒毽蘩弩j冁l蚤§甓《《ggil一|l;| 全可以和普通8051单片机一样使用.三.内部扩展删P89C51Rx2系列单片机中的RA2/RB2/RC2在原来8052标准内置256字节RAM的基础上,又扩展了256字节ERAM,共有512字节内置RAM.P89C51RD2则扩展了768字节ERAM,共有1024字节内置RAM.四降低簟片机对外部电磁辐射通过设置6时钟/机器周期(双倍速),可以将外接晶振频率降低一半,能有效降低对外部电磁辐射(EMI).更重要的是,P89C51Rx2系列单片机可以关闭ALE输出,最有效地降低EMI.通过将ALEoff位(AUXR.0)置1,可以使ALE引脚仅在读取外接存储器时才有变化电平输出,从而降低对外部电磁辐射.另外,F'89C51Rx2系列单片机还通过限制引脚信号陕速切换时产生的过冲(对10ns1~.1的上升,下降的摆率采取限制措施),来降低对外部的电磁辐射. 五双l咿m数据指针标准的8051只有一个16位的DPTR数据指针.这样,在进行数据块复制等动作时,必须对源地址指针和目标地址指针进行暂存,编程会非常麻烦.P89C:;1R系列单片机内有两个DPTR数据指针DPTR0/DPTR1,可以通过设…S位(AUXR1.0)方便地选择,DPS置0则选中DPTR0,置1则选中DPTR1.通过执行INC AUXR1指令,能对DPS快速切换,并不影响AUXR1寄存器的高位. AUXR:爵存器(8EH)和AUXR1寄存器(A2H)是在8051标准内核基)adc_Show[0]=adc_Show[1]adc_show[1]=.;adc_show[4]=V'adc_show[5]=0)完整的程序见本期配刊光盘.电路的实际运行结果如图2所示,旋转黑色电位器,可以看到AD转换的电压值. 篇后练习将电位:器连接在ADC的通道IADC1上,编写程序在LCD上显示AD转换值.圆巳口口B.11总第53口期?www.r日 "馥尊础上新增的特殊寄存器,已被多家51芯片厂商用于增强型51单片机产品中,已成为事实上增强型51单片机一个新的标志性标准.六1卵与删P编程方式可在线烧录ISP(InSystemProgramming)和可在应用烧录IAP (InApplicationProgramming)功能改变了单片机的固化程序升级需拔插单片机芯片,使用专用编程器进行烧录的麻烦方式,轻松实现在单片机系统电路板上对单片机芯片内固化的程序进行升级.为了能够实现ISP和IAP功能,P89C51Rx2单片机芯片上内置了BootROM固件,固件中包含着用于擦除,烧录Flash闪存的多种子程序.另外,P89C51Rx2片内Flash闪存以4KB为一块,被分为大小一样的2/4/8/16块.当其中的一块或几块已经烧录着正在运行的程序时,可以对另外的闪存块进行擦除和烧录,完成后再将程序的入El地址设定为新烧录闪存块的首地址.从而实现了不需拔插芯片而对单片机芯片固化程序进行升级. 采用ISP方式烧录程序时,只需用三根串口连线如图2所示方式连接到计算机RS232接121,并在计算机上运行飞利浦系列单片机专用的ISP软件FlashMagic,即可实现对单片机芯片内Flash闪存的擦除,烧录,加密等动作.FlashMagic软件可到网上下载,下载网址为ft9:///pub/esa/flashmagic/F1ashMagic.exe除了可以用ISP方式烧录程序,P89C51Rx2还可以通过调用在芯片内提供的BootROM固件里用于擦除, 烧录Flash闪存的子程序,对当前运行程序块以外的Flash闪存块进行编程. 这一编程方式被称为IAP功能.七,ONCE模式ONCE(在线仿真)模式可以实现对系统的测试和调试而不需要将器件从电路中移去.当器件处于ONCE模式时,PO口处于悬浮状态,其他I/O口,ALE和PSEN为弱上拉,?振荡电路保持工作状态.器件处于该模式时,可用仿真器测试CPU驱动电路,执行正常复位时恢复正常操作.八,可编程计数器^可编程计数器PCA由5个基本一样的可编程计数器模块组成,5个模块共用一套计数/定时器系统,但各有各的比较/捕捉器.每个模块都可单独经编程实现捕捉模式,软定时器模式,高速输出模式,PWM(脉宽调制)模式.第5个模块(即模块4)还多一种看家狗模式.计数/定时器的信号源可选择单倍机器周期频率,3倍机器周期频率,定时器0的溢出频率,ECI引脚(P1.2)输入脉冲中的一种.在使用上,比起仅有计数/定时器0,1,2的标准8052多了更大的灵活性.九全双工增强型咖岍除了标准操作模式外,P89C51Rx2内置的UART(全双工串行口)还可实现自动地址识别和通过查询丢失的停止位进行帧错误检测.当使用帧错误检测时,丢失的位将会置位SCON中的FE位,FE与SM0共用SCON.7,通过PCON.6(SMOD0位) 选择.如果SMOD0置位,SCON.7作为FE,如果SMOD0为0,SCON.7作为SM0.P89C51Rx2内置的UART还对多机通信方式作了增强,可以自动进行地址识别.它使UART可以通过硬件比较从串行数据流中识别出特定的地址,这样就不必花费大量软件资源秘臻叠去检查每一个从串口输入的串行地址.在9位UART模式模式2和模式3 下,如果接收的地址字节中包含给定地址或广播地址(广播地址是指一机发送,多机同时接收数据的模式),接收机就会自动接收串行总线上的数据. 通过一定的地址编号方式,可以实现一机对任意另一,二,三直至更多机同时发送数据.十,其他类似的型号Philips内置Flash闪存的增强型P89C51系列有多个子系列,X2系列包括P89C51X2/52X2/54X2/58X2 (片p~Flash闪存分别为4K/8K/16K/ 32K,51X2片内RAM为128字节,其他均为256字节,无扩展ERAM),片内~gP89C51Rx2系列少了ISP和IAP 编程方式,PeA,看门狗电路,其他方面(包括可倍频)则完全一样.P89C61X2/62X2(片内Flash闪存均为64K,RAM均为256字节,扩展ERAM分别为256/768字节),片内比P89C51Rx2系列少了PeA,看门狗电路,其他方面(包括可ISP和IAP编程方式和倍频)则完全一样.P89C660/662/664/668(片内Flash闪存分别为16K/32K/64K/64K,RAM均为256字节,扩展ERAM 分别为256/768/1768/7936字节),在拥有P89C51Rx2系列所有功能的基础上,还增加了I2C串行通信模块.此外,PhiliI~还有14~28引脚的LPC900系列也使用了51内核,在外部引脚上作了精简,限于篇幅,本文不作详细介绍.十一性价比目前,P89C51X2/52X2/54X2/58X2报价分别为7.2/8.2/9.8/15.2元,P89C51RA2/RD2报价分别为7.8/30元,P89C60X2/61X2报价分别为19.2/19.8元,P89C662/664/668报价分别为51/53/51元.可以根据应用需要选择性价比最高的型号.⑩掌誊凳g2006.11总第53口期?www.radio.oom.on37 黟;;.。
单片机原理及应用期末考试试题汇总1、单片机是将微处理器、一定容量的 RAM 和ROM以及I/O口、定时器等电路集成在一块芯片上而构成的微型计算机;2、单片机89C51片内集成了4KB的FLASH ROM,共有5个中断源;3、两位十六进制数最多可以表示256个存储单元;4、89C51是以下哪个公司的产品 CA、INTELB、AMDC、ATMELD、PHILIPS5、在89C51中,只有当EA引脚接高电平时,CPU才访问片内的Flash ROM;6、是非题:当89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片内是否有程序存储器;T7、是非题:当89C51的EA引脚接高电平时,CPU只能访问片内的4KB空间;F8、当CPU访问片外的存储器时,其低八位地址由P0口提供,高八位地址由P2口提供,8位数据由P0口提供;9、在I/O口中,P0口在接LED时,必须提供上拉电阻,P3口具有第二功能;10、是非题:MCS-51系列单片机直接读端口和读端口锁存器的结果永远是相同的;F11、是非题:是读端口还是读锁存器是用指令来区别的;T12、是非题:在89C51的片内RAM区中,位地址和部分字节地址是冲突的;F13、是非题:中断的矢量地址位于RAM区中;F14、MCS-51系列单片机是属于B体系结构; A、冯诺依曼B、普林斯顿 C、哈佛 D、图灵15、89C51具有 64 KB的字节寻址能力;16、是非题:在89C51中,当CPU访问片内、外ROM区时用MOVC指令,访问片外RAM区时用MOVX指令,访问片内RAM区时用MOV 指令;T17、在89C51中,片内RAM分为地址为00H~7FH 的真正RAM区,和地址为80H~FFH 的特殊功能寄存器SFR 区两个部分;18、在89C51中,通用寄存器区共分为4组,每组8个工作寄存器,当CPU复位时,第0组寄存器为当前的工作寄存器;19、是非题:工作寄存器区不允许做普通的RAM单元来使用;F20、是非题:工作寄存器组是通过置位PSW 中的RS0和RS1来切换的;T21、是非题:特殊功能寄存器可以当作普通的RAM单元来使用;F22、是非题:访问128个位地址用位寻址方式,访问低128字节单元用直接或间接寻址方式;T23、是非题:堆栈指针SP的内容可指向片内00H~7FH的任何RAM单元,系统复位后,SP初始化为00H;F24、数据指针DPTR是一个16位的特殊功能寄存器寄存器;25、是非题:DPTR只能当作一个16位的特殊功能寄存器来使用;F26、是非题:程序计数器PC是一个可以寻址的特殊功能寄存器;F27、在89C51中,一个机器周期包括 12个振荡周期,而每条指令都由一个或几个机器周期组成,分别有单周期指令、双周期指令和4周期指令;28、当系统处于正常工作状态且振荡稳定后,在RST引脚上加一个高电平并维持 2个机器周期,可将系统复位;29、是非题:单片机89C51复位后,其PC 指针初始化为0000H,使单片机从该地址单元开始执行程序;T30、单片机89C51复位后,其I/O口锁存器的值为 0FFH ,堆栈指针的值为 07H ,SBUF 的值为不定 ,内部RAM的值不受复位的影响,而其余寄存器的值全部为 0H ;31、是非题:单片机系统上电后,其内部RAM 的值是不确定的;T32、以下哪一个为51系列单片机的上电自动复位电路假设RST端内部无下拉电阻P11图1-8a;33、在89C51中,有两种方式可使单片机退出空闲模式,其一是任何的中断请求被响应 ,其二是硬件复位;而只有硬件复位方式才能让进入掉电模式的单片机退出掉电模式;34、请用下图说明89C51单片机读端口锁存器的必要性;读锁存器是为了避免直接读端口引脚时,收到外部电路的干扰,而产生的误读现象;35、请说明为什么使用LED需要接限流电阻,当高电平为+5V时,正常点亮一个LED 需要多大阻值的限流电阻设LED的正常工作电流为10mA,导通压降为,为什么解:因为LED导通时,电压降是固定的;为了使LED既能正常工作电流为10mA,又不至于被过大的电流损坏,所以必须加一个限流电阻;36、以下哪一条指令的写法是错误的 C ; A、MOV DPTR,3F98H B、MOV R0,0FEH C、MOV 50H,0FC3DH D、INC R037、以下哪一条指令的写法是错误的 D ;A、INC DPTRB、MOV R0,0FEHC、DEC AD、PUSH A38、以下哪一条指令的写法是错误的 B ;A、MOVC A,A+DPTRB、MOV R0,FEHC、CPL AD、PUSH ACC39、是非题:在51系列单片机的指令系统中,其加法、减法、乘法和除法必须有累加器A的参与才能完成;T40、以下哪一条是位操作指令 B ;A、MOV P0,0FFHB、CLRC、CPL AD、POP PSW41、以下哪一条是位操作指令 B ;A、MOV P1,0FFHB、MOV C,C、CPL AD、POP PSW42、以下哪一条是位操作指令 B ;A、MOV P0,0FFHB、SETB TR0C、CPL R0D、PUSH PSW43、简述89C51单片机中断的概念;当CPU正在处理某件事情的时候,外部发生的某一事件请求CPU迅速去处理,于是,CPU 暂时中止当前的工作,转去处理所发生的时间;中断服务处理完该事件以后,再回到原来被中止的地方,继续原来的工作,这样的过程成为中断;44、什么是保护现场,什么是恢复现场保护现场:当CPU响应中断程序时,硬件会自动把断点地址16位程序计数器的值压入堆栈之外,用户还须注意保护有关工作寄存器、累加器、标志位等信息;恢复现场:在完成中断服务程序后,恢复原工作寄存器、累加器、标志位等的内容;45、单片机89C51有哪些中断源,对其中断请求如何进行控制89C51中断系统有5个中断源:●INT0:外部中断0请求,低电平有效;通过引脚输入;●INT1:外部中断1请求,低电平有效;通过引脚输入;●T0:定时器/计数器0溢出中断请求;●T1:定时器/计数器1溢出中断请求;●TXD/RXD:串行口中断请求;当串行口完成一帧数据的发送或接收时,便请求中断;46、单片机89C51的5个中断源分别为INT0 、INT1 、T0 、T1 以及 TXD/RXD ;47、单片机89C51的中断要用到4个特殊功能寄存器,它们是TCON、SCON、 IE 以及IP;48、在89C51中,外部中断由IT01位来控制其两种触发方式,分别是电平触发方式和边沿触发方式;49、简述单片机89C51中断的自然优先级顺序,如何提高某一中断源的优先级别;中断源控制位外部中断0PX0定时器/计数器0溢出中断PT0外部中断1PX1 定时器/计数器1溢出中断PT1串行口中断PS若某几个控制位为1,则相应的中断源就规定为高级中断;反之,若某几个控制位为0,则相应的中断源就规定为低级中断;当同时接收到几个同一优先级的中断请求时,响应哪个中断源则取决于内部硬件查询顺序即自然优先级;50、是非题:在89C51中,当产生中断响应时,所有中断请求标志位都由硬件自动清零;F51、中断处理过程分为3个阶段,即中断响应、中断处理以及中断返回 ;52、简述51系列单片机中断响应的条件;●有中断源发出中断请求;●中断总允许位EA=1,即CPU开中断;●申请中断的中断源的中断允许位为1,即中断没有屏蔽;●无同级或更高级中断正在被服务;●当前的指令周期已经结束;●若现在指令为RETI或者是访问IE或IP 指令,则该指令以及紧接着的另一条指令已执行完;53、是非题:在51系列单片机中,中断服务程序从矢量地址开始执行,一直到返回指令RETI为止;T54、在51系列单片机执行中断服务程序时,为什么一般都要在矢量地址开始的地方放一条跳转指令因为51系列单片机的两个相邻中断源中断服务程序入口地址相距只有8个单元,一般的中断服务程序是容纳不下的,因此一般都要在相应的中断服务程序入口地址中放一条跳转指令;55、为什么一般都把主程序的起始地址放在0030H之后因为0000H~0030H中有中断的矢量地址,为了避免冲突,一般都把主程序的起始地址放在0030H之后;56、是非题:在执行子程序调用或执行中断服务程序时都将产生压栈的动作;T57、单片机89C51片内有两个 16 位的定时/计数器,即T0和T1,它们都有定时和事件计数的功能;58、是非题:定时/计数器工作于定时方式时,是通过89C51片内振荡器输出经12分频后的脉冲进行计数,直至溢出为止;T59、是非题:定时/计数器工作于计数方式时,是通过89C51的和对外部脉冲进行计数,当遇到脉冲下降沿时计数一次;T60、是非题:定时/计数器在工作时需要消耗CPU的时间;F61、是非题:定时/计数器的工作模式寄存器TMOD可以进行位寻址;F62、是非题:定时/计数器在使用前和溢出后,必须对其赋初值才能正常工作;F63、简述定时/计数器4种工作模式的特点;模式1:是16位的定时器/计数器;模式2:把TL0或TL1配置成一个可以自动重装载的8位定时器/计数器;模式3:对T0和T1大不相同;若将T0设置为模式3,则TL0和TH0被分为两个相互独立的8位计数器;定时器T1无工作模式3状态; 模式0:与模式1几乎完全相同,唯一的差别是模式0中,寄存器TL0用5位,TH0用8位;64、如何运用两个定时/计数器相串联来产生一秒的时钟基准信号;试画出必要的电路部分,并写出程序;设晶振频率为12MHz,用LED显示秒信号;注:计数器输入端为T0、T1;ORG 0000HLJMP MAINORG 000BHLJMP ONEORG 001BHLJMP COUORG 0030HMAIN: MOV P1,0FFHMOV SP,60HMOV TMOD,01100001BMOV TL0,0B0HMOV TH0,3CHMOV TL1,0F6HMOV TH1,0F6HSETB TR0SETB TR1SETB ET0SETB ET1SETB EASJMP $ONE: PUSH PSWPUSH ACCMOV TL0,0B0HMOV TH0,3CHCPLPOP ACCPOP PSWRETICOU: PUSH PSWPUSH ACCCPLPOP ACCPOP PSWRETIEND65、是非题:在51系列单片机的指令中,既有带借位的减法指令,又有不带借位的减法指令;F66、用一个定时/计数器加软件计数器的方式,实现一秒的时钟基准信号,试写出程序并加以说明;设晶振频率为12MHz,由口输出秒信号;本程序使用定时器T0,工作模式1;由于晶振频率为12MHz,因此利用定时器T0计时50ms,其初值为3CB0H;利用工作寄存器R7作软件计数器,计数20次;每计时满一秒,就将口输出信号取反,以输出秒信号;ORG 0000HLJMP MAINORG 000BHLJMP ONEORG 0030HMAIN: MOV P1,0FFHMOV SP,60HMOV R7,0MOV TMOD,01HMOV TL0,0B0HMOV TH0,3CHSETB TR0SETB ET0CLR PT0SETB EALJMP $ONE: PUSH PSWPUSH ACCINC R7 CJNE R7,20,LOOPMOV R7,0CPLLOOP: MOV TL0,0B0HMOV TH0, 3CHPOP ACCPOP PSWRETIEND67、单片机89C51的时钟频率为6MHz,若要求定时1ms,定时/计数器工作于模式1,其定时/计数器的初值为FE0CH.68、是非题:单片机89C51的定时/计数器是否工作可以通过外部中断进行控制;T69、单片机89C51具有并行通信和串行通信两种通信方式;70、是非题:并行通信的优点是传送速度高,缺点是所需传送线较多,远距离通信不方便;T71、是非题:串行通信的优点是只需一对传送线,成本低,适于远距离通信,缺点是传送速度较低;T72 、串行通信有同步通信和异步通信两种通信方式;73、在异步通信中,数据的帧格式定义一个字符由4部分组成,即:起始位、数据位、奇偶校验位和停止位;74、是非题:异步通信中,在线路上不传送字符时保持高电平;T75、是非题:在异步通信的帧格式中,数据位是低位在前高位在后的排列方式;T76、是非题:异步通信中,波特率是指每秒传送二进制代码的位数,单位是b/s;T77、串行通信中,为使设备同步工作,需要通信双方有两个共同的要求,一是通信双方必须采用统一的编码方式,二是通信双方必须能产生相同的传送速率 ;78、是非题:在89C51的串行通信中,串行口的发送和接收都是对特殊功能寄存器SBUF进行读/写而实现的;T79、单片机89C51中的串行通信共有 4 种方式,其中方式 0 是用作同步移位寄存器来扩展I/O口的;80、是非题:在单片机89C51中,串行通信方式1和方式3的波特率是固定不变的;F81、是非题:在单片机89C51中,读和写的SBUF在物理上是独立的,但地址是相同的;T82、是非题:单片机89C51一般使用非整数的晶振是为了获得精确的波特率;T83、是非题:单片机89C51和PC机的通信中,使用芯片MAX232是为了进行电平转换;T84、设89C51的晶振频率为,选用定时器T 工作模式2作波特率发生器,波特率为2400b/s,且SMOD置0,则定时器的初值为F4H ;85、简述89C51串口通信的四种方式及其特点;方式0:同步移位寄存器输入/输出方式,常用于扩展I/O口;波特率固定为振荡频率的1/12,并不受PCON寄存器中SMOD位的影响;方式1:用于串行发送或接收,为10位通用异步接口;TXD与RXD分别用于发送与接收数据;收发一帧数据的格式为1位起始位、8位数据位低位在前、1位停止位,共10位;波特率由定时器T1的溢出率与SMOD值同时决定; 方式2:用于串行发送或接收,为11位通用异步接口;TXD与RXD分别用于发送与接收数据;收发一帧数据的格式为1位起始位、8位数据位低位在前、1位可编程的第9数据位和1位停止位,共11位;波特率取决于PCON中SMOD位的值:当SMOD=0时,波特率为的1/64;当SMOD=1时,波特率为的1/32;方式3:用于串行发送或接收,为11位通用异步接口;TXD与RXD分别用于发送与接收数据;帧格式与方式2相同,波特率与方式1相同;86、以下哪种方式的接口总线最少 CA、SPIB、I2CC、单总线D、并行通信87、是非题:89C51单片机没有SPI接口,只能依靠软件来模拟SPI的操作;T88、是非题:89C51单片机没有I2C接口,只能依靠软件来模拟I2C的操作;T89、是非题:在89C51中,当用某两根口线来实现I2C总线的功能时,这两根口线必须接上拉电阻;T90、是非题:在I2C总线的时序中,首先是起始信号,接着传送的是地址和数据字节,传送完毕后以终止信号结尾;F91、是非题:在单总线测温器件DS18S20中,每个器件都具有一个唯一的序号;T92、简述在使用普通按键的时候,为什么要进行去抖动处理,如何处理;键抖动会引起一次按键被误读多次;为了确保CPU对键的一次闭合仅做一次处理,必须去除键抖动;在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理;按键的抖动,可用硬件或软件两种方法消除;93、键盘可分为独立连接式和行列矩阵式两类;键盘可分为编码式和非编码式两类;94、LED数码管有静态显示和动态显示两种方式;95、简述LED数码管动态扫描的原理及其实现方式;动态扫描的原理是利用人的视觉暂留,让人觉得各位LED同时点亮一样;逐位轮流点亮各个LED,每一位保持1ms,在10~20ms之内再一次点亮,重复不止,就可以实现动态扫描;96、是非题:在A/D转换器中,逐次逼近型在精度上不及双积分型,但双积分型在速度上较低;T97、是非题:A/D转换的精度不仅取决于量化位数,还取决于参考电压;T98、以下哪个是属于单片机系统前向通道的器件AA、A/D转换B、D/A转换C、LED数码管D、继电器99、MCS-51 单片机的RS1,RS0=01 时,当前寄存器R0—R7 占用内部RAM B 单元; A、00H—07H B、 08H—0FH C、 10H—17H D、18H—1FH100、能否把继电器直接接在89C51的某一口线上来用为什么不能;因为89C51的I/O所提供的电压不足于驱动继电器,必须加一个三极管;101、MCS-51 单片机有片内RAM 容量 A ;A. 128B B、 4KB C、 8KB D、 256B102、简述看门狗的基本原理; 看门狗是通过软件和硬件的方式在一定的周期内监控弹片机的运行状况,如果在规定时间内没有收到来自单片机的清除信号,也就是我们通常说的没有及时喂狗,则系统会强制复位,以保证系统在受干扰时仍然能够维持正常的工作状态103、简述软件陷阱技术的原理;软件陷阱就是用一条引导指令强行将捕获的程序引向一个指定的地址,在那里有一段专门对程序出错进行处理的程序,以使程序按既定目标执行;104、在执行下列指令后,A=___60H___,R0=__45H____,60H=___4 5H___; MOV A, 45HMOV R0, 60HMOV R0,AXCH A, R0105、MCS-51 单片机的最大时序定时单位是 D ; A、拍节 B、状态 C、机器周期 D、指令周期106、设RAM 中2456H=66H,2457H=34H,ROM 中2456H=55H,2457H=64H;请分析下面程序执行后各寄存器的内容;A=___64H___,DPTR=__2356H____; MOV A,1 MOV DPTR,2456H MOVC A,A+DPTR107、MCS-51 单片机的定时器/计数器工作方式0 是C ;A、8 位计数器结构B、16 位计数器结构C、13 位计数器结构D、2 个8 位计数器结构108、执行下列程序后,A=__35H____,B=__16H____;MOV A,9FHMOV B,36HANL B,ASETB CADDC A,B109、MCS-51 单片机的外部中断0 中断入口地址为 C ;A、 000BHB、 001BHC、0003HD、 0013H110、将以表格形式存放在从table 开始的内部单元中的8 个单字节正数求平均值;MOV R0,TABLEMOV R2,8MOV R4,0LOOP1:MOV A,R0_ADDCA,R4_____MOV R4,AINC R0DJNZ R2,LOOP1MOV B,8_DIVAB_____ RET。
89C51单片机I/O口模拟串行通信的实现方法·严天峰·目前普遍采用的MCS51和PIC系列单片机通常只有一个(或没有)UART 异步串行通信接口,在应用系统中若需要多个串行接口(例如在多机通信系统中,主机既要和从机通信又要和终端通信)的情况下,通常的方法是扩展一片8251或 8250通用同步/异步接收发送芯片(USART),需额外占用单片机I/O资源。
本文介绍一种用单片机普通I/O口实现串行通信的方法,可在单片机的最小应用系统中实现与两个以上串行接口设备的多机通信。
1.串行接口的基本通信方式串行接口的有异步和同步两种基本通信方式。
异步通信采用用异步传送格式,如图1所示。
数据发送和接收均将起始位和停止位作为开始和结束的标志。
在异步通信中,起始位占用一位(低①电平),用来表示字符开始。
其后为7或8位的数据编码,第8位通常做为奇偶校验位。
最后为停止位(高电平)用来表示字符传送结束。
上述字符格式通常作为一个串行帧,如无奇偶校验位,即为常见的N.8.1帧格式。
串行通信中,每秒传送的数据位称为波特率。
如数据传送的波特率为1200波特,采用N.8.1帧格式(10位),则每秒传送字节为120个,而字节中每一位传送时间即为波特率的倒数:T=I/1200=0.833ms。
同样,如数据传送的波特率为9600波特,则字节中每一位传送时间为T=1/9600=0.104 ms。
根据数据传送的波特率即字节中每一位的传送时间,我们便可用普通I/O口来模拟实现串行通信的时序。
2.硬件电路 89C51单片机通过普通I/O口与PC机RS232串口实现通信的硬件接口电路如图2所示。
由于PC系列微机串行口为RS232C标准接口,与输入、输出均采用TTL电平的89C51单片机在接口规范上不一致,因此TTL电平到RS232接口电平的转换采用MAXIM公司的MAX232 标准RS232接口芯片,该芯片可以用单电压(+5V)实现RS232接口逻辑“1”(-3V~15V)和逻辑“0”(+3V~15V)的电平转换。
89C51单片机的串口通信编程1一、pc机上的串口通信编程过程如下:1.建立项目打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点);2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX 控件出现在列表框中。
选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。
(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX 就可以了),这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。
3.利用ClassWizard定义CMSComm类控制对象打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。
4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。
89C51 单片机 I/O 口模拟串行通信的实现方法
目前普遍采用的 MCS51 和 PIC 系列单片机通常只有一个(或没有)UART异步串行通信接口,在应用系统中若需要多个串行接口(例如在多机通信系统中,主机既要和从机通信又要和终端通信)的情况下,通常的方法是扩展一片8251或 8250通用同步/异步接收发送芯片(USART),需额外占用单片机I/O 资源。
本文介绍一种用单片机普通I/O 口实现串行通信的方法,可在单片机的最小应用系统中实现与两个以上串行接口设备的多机通信。
1.串行接口的基本通信方式
串行接口的有异步和同步两种基本通信方式。
异步通信采用用异步传送格式,如
图 1 所示。
数据发送和接收均将起始位和停止位作为开始和结束的标志。
在异步通信中,起始位占用一位(低电平),用来表示字符开始。
其后为7或8位的数据编码,第8 位通常做为奇偶校验位。
最后为停止位(高电平)用来表示字符传送结束。
上述字符格式通常作为一个串行帧,如无奇偶校验位,即为常见的 N.8.1 帧格式。
串行通信中,每秒传送的数据位称为波特率。
如数据传送的波特率为1200 波特,采用 N.8.1 帧格式(10 位),则每秒传送字节为 120 个,而字节中每一位传送时间即为波特率的数:T=I/1200=0.833ms。
同样,如数据传送的波特率为9600 波特,则字节中每一位传送时间为 T=1/9600=0.104 ms。
根据数据传送的波特率即字节中每一位的传送时间,我们便可用普通I/O 口来模拟实现串行通
信的时序。
2.硬件电路
89C51 单片机通过普通 I/O 口与 PC 机 RS232 串口实现通信的硬件接口电路如图 2 所示。
由于 PC 系列微机串行口为 RS232C 标准接口,与输入、输出均采用 TTL 电平的 89C51 单片机在接口规范上不一致,因此 TTL 电平到 RS232 接口电平的转换采用 MAXIM 公司的 MAX232 标准RS232 接口芯片,该芯片可以用单电压(+5V)实现 RS232 接口逻辑“1”(-3V~15V)和逻辑“0”(+3V~15V)的电平转换。
图中 89C51 的 P1.0 模拟发送端,P1.1 模拟接收端。
3.接口程序设计
软件设计中,89C51 单片机的 P1.0 和 P1.1 口分别模拟串行通信的发送和接收,其接口程序主要由 INPUT 发送子程序和OUTPUT 接收子程序组成。
通信速率 1200 bit /s,帧格式为 N.8.1。
发送时,先发送一个起始位(低电平),接着按低位在先的顺序发送8位数据,最后发送停止位。
接收时,先判断P1.1接收端口是否有起始低电平出现,如有则按低位在先的顺序接收 8 位数,最后判
断 P1.1 口是否有停止高电平出现,如有则完成一个数据接收,否则继续等待。
其中软件编写要严格按照异步通
信的时序进行,每 bit 位传送时间间隔按通信速率 1200 bit /s 计算为
833μs。
其模拟串行通信程序清单见下,系统要求单片机晶振为 6M。
程序清单如下:
TXD EQU P1.0
RXD EQU P1.1 ;定义 89C51 P1.0 为发送端,P1.1 为接收端
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV A, #30H
MOV R5,#N
SETB RXD ;P1.0 置高
TX: LCALL INPUT ;调用发送子程序,将寄存器 A 中内容发给 PC 机
;
SETB TXD ;P1.1 置高
MOV R0,#40H
RX: LCALL OUTPUT ;调用接收子程序,将接收的 N 个数据存放在以 40H 开始的地址中
MOV @R0,A
INC R0
DJNZ R5, RX ;N 个数据接收结束,则等待,否则转 RX 继续接收
AJMP $
;**************延时 833μs 子程序***** DEL833: MOV R7 ,#205
MS11: DJNZ R7,MS11
RET
; **********************************
;******** 89C51 发送数据给 PC 机子程序**** INPUT: CLR C
MOV TXD,C ;发送起始位
LCALL DEL833 ;延时
MOV R3,#8
REP: RRC A
MOV TXD ,C
LCALL DEL833
DJNZ R3,REP ;发送 8 位数据
SETB C ;发送停止位
MOV TXD,C
LCALL DEL833
RET
;********从 PC 机接收数据子程序******** OUTPUT: JB RXD, $ ;判断是否有起始位出现LCALL DEL833
MOV R3,#8
OUT: MOV C ,RXD
RRC A
LCALL DEL833
DJNZ R3,OUT ;接收 8 位数据
JNB RXD ,$ ;判断是否有停止位出现
RET
本文介绍的用 89C51 单片机I/O口模拟实现串行通信的方法,已成功地应用在某电压数据采集系统中,实践证明能可靠地传送和接收数据.。