西安交大《微机控制系统及其应用》实验报告.doc
《西安交大《微机控制系统及其应用》实验报告.doc》由会员分享,可在线阅读,更多相关《西安交大《微机控制系统及其应用》实验报告.doc(30页珍藏版)》请在三一办公上搜索。
1、微机控制系统及其应用课程实验报告实验一 代码转换一、 实验时间及地点电信学院西1楼,2011年11月13日二、 实验目的熟悉C8051单片机常用代码之间的转换方法。三、实验任务1. 设计并调试一个程序,将片内20H单元中8位无符号二进制数转化为BCD码,结果存入以30H开始的单元中。2. 设计并调试一个程序,将片内以20H开始的单元中的4字节无符号二进制数转化为BCD码,结果存入以30H开始的单元中,低位字节在低地址端。3. 设计并调试一个程序,将累加器A中的二进制数(0F)转化为ASC码,结果仍放在A中。四、实验原理二进制数转换BCD码将无符号二进制数转换为BCD码,实质是将二进制数转换为十
2、进制数,但是这里的十进制数中的每一位用BCD码来表示,进制转换的原理实质是按权展开。设需转换的二进制数为a,a%10即得到所需要的十进制数的最低位数,(a/10)%10得到十进制数的高一位数,依次类推,可以进行多位无符号二进制数到BCD码的转换。本次实验是将8位无符号数转换为转化为BCD码,即0255。二进制数(0F)转化为ASC码0F的二进制数转换为ASC码,关系可表示如下:五、实验内容及步骤1、启动计算机,进入仿真环境,完成进行初始化设置。2、编译无误后,运行程序,打开数据窗口(DATA),点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更
3、新为03。用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果。修改源程序中给累加器A的赋值,重复实验,观察实验效果。六、实验运行及结果18位无符号二进制数转化程序流程图将二进制数给指定指针变量将数除以100,得百位数保存百位数将余数再除以10,得十位数保存十位数余数为个位数,将其保存到指定指针变量中结束C语言源程序void main() unsigned char *a,*b; WDTCN = 0xde; WDTCN = 0xad; SYSCLK_Init(); PORT_Init(); a=0x20;b=0x30; *a=0xA8H; *b=*a/1
4、00; b+; *b=(*a-(*a/100)*100)/10; b+; *b=*a%10; while(1);编译结果片内20H单元中8位无符号二进制数#A8h,转换为十进制数为168,其BCD码为168,将其存入30H开始的单元中,从低位到高位分别为#01h,#06h,#08h;结果如下图所示:24字节无符号二进制数转化为BCD码程序流程图定义一个地址指针设定一个待转换的初始值,将其放入指定指针变量除10得到除数和余数将余数存入30H开头的地址内否除数为0是除数除10得到新的除数和余数将余数存入地址加一的新地址内除数除10得到除数和余数结束C语言源程序void main() unsigne
5、d char i;unsigned long tempp; ori=0x20; *ori=0x00000400;tempp=*ori;temp=0x30;for(i=10;i-;i0) *temp=tempp%10; tempp=tempp/10; temp+;while(1);编译结果片内以20H开始的单元中的4字节无符号二进制数为0xFEEFFFFFh,其BCD码为141503,将其存入30H开始的单元中,从低位到高位分别为#03h,#00h,#05h,#01h,#04h,#01h,结果如下图所示:3ASCII码转换将累加器A中的二进制数(0F)转化为ASC码,结果仍放在A中,从ASCII
6、编码表中可知,若4位二进制数小于10,则在此二进制数上加30H即变为相应的ASCII码;若10,则应加37H方可。本次实验取cH进行转换。程序流程图将预转换二进制数存入AA10NY加30H加37H将转换后的值存入A中结束C语言源程序#include void main (void) char y; ACC=0x0b; y=ACC; if (y0x0c) y=y+0x30; else y=y+0x37; ACC=y; while(1);编译结果程序运行后,转换后结果存放入A中。本例中A中预转换的二进制数为0BH,转化为ASC码后A寄存器中为43H,结果如下图所示:七、注意事项及结果分析1 8位无
7、符号二进制表示的十进制范围是0255,检验结果时应检查32H,31H,30H对应的结果是否正确。4字节无符号二进制数示的十进制范围:04,294,967,295(即232-1)。转换为BCD码形式需设置10个字节进行存储。2二进制数为4字节无符号数故需设置为unsigned long 型,指针需分别设成unsigned long和unsigned char 型,否则会出错。实验二 液晶显示程序设计一、实验时间及地点电信学院西1楼,2011年11月20日二、实验目的掌握C8051单片机液晶显示程序设计方法。三、实验任务1. 设计并调试一个显示程序,利用所提供液晶显示器滚动显示123456这六个数
8、字,并以每字符500毫秒的速度向右移动循环。2. 实现秒表计时功能。用键盘产生中断控制秒表的开始和停止。3. 实现日历功能,并将日历显示在液晶屏上。四、编程原理及实验运行结果1. 滚动数字显示程序流程图:开始确定好显示数字位置,定义坐标横坐标设为初始值进行定时,定时间隔500ms横坐标超液晶横向点数上限是否液晶显示坐标变换,横坐标增加特定值子程序描述数字的显示函数:void LCDC_DispWord (unsigned char x, y, unsigned char code *p, unsigned char line, length, Flag),其中x、y表示显示字符的坐标,*p表示
9、显示字符的代码。 延时函数:实际中起到定时作用。void Delay_ms(unsigned int times),其中times表示延时的毫秒数。利用LCDC_DispWord()函数显示数据,利用Delay_ms()延时500ms,将数字循环移位。C语言源程序#include main.hunsigned char key;/定义键值变量void main (void) int i;/禁止看门狗定时器WDTCN = 0xde; WDTCN = 0xad;/初始化 SYSCLK_Init (); PORT_Init (); Key_Init();LCDC_Init();LCDC_DisFul
10、l(Full);Delay_ms(500);LCDC_DisFull(Clr);Delay_ms(500);/dis_start0();while(1) for(j=0;j=20) j=0; 编译结果经编译调试后,液晶显示器滚动显示123456这六个数字。2. 秒表计时功能键盘控制实现设置按键0,1,2的功能为开始、停止与暂停,设标志位flag,并初始化flag=0;当flag=1时(开始),进行计时变量的加1操作;当flag=2时(停止),将所有的计时变量清零,实现即时停止;当flag=3时(暂停),空操作,计时时间保持不变,从而实现暂停的功能。程序开始确定好显示数字位置,定义坐标流程图根据
11、按键进入秒表开始、停止计数以及清零子程序结束扫描按键C语言主程序计时开始程序:void time_start(void)while (1)dis_time(Ti+);Delay_ms(2);key=GetKey();if (key=0x0e)To=Ti;break;计时暂停程序:void time_pause(void)while (1)dis_time(To);key=GetKey();if (key=0x0e)Ti=To;break;if (key=0x0d) Ti=0;break; 时间显示程序:void dis_time(unsigned int Times)unsigned int
12、Tm,Ts,Tms;Tm=Times/6000;Ts=(Times/100)%60;Tms=Times%100;dis_minute(Tm);LCDC_DispWord (12, 2, WLib_ddot_3x8, 1, 3, 1);dis_second(Ts);LCDC_DispWord (30, 2, WLib_ddot_3x8, 1, 3, 1);dis_milisecond(Tms);主程序void main (void)/禁止看门狗定时器WDTCN = 0xde; WDTCN = 0xad;/初始化SYSCLK_Init (); PORT_Init (); Key_Init();LC
13、DC_Init();LCDC_DisFull(Full);Delay_ms(500);LCDC_DisFull(Clr);Delay_ms(500);/dis_start0();dis_time(Ti); while(1) key=GetKey();/调用键盘扫描函数,返回的键值送变量keyif(key!=0xFF)/键值有效 执行按键程序Alarm(1);/响铃Delay_ms(50);Alarm(0);/关闭铃声switch (key)case 0x0a:time_start();break;case 0x0e:time_pause();break;case 0x0d:Ti=0;dis_t
14、ime(Ti);break;default: break;编译结果经编译后,液晶显示器上可以显示秒表时间,并通过按下按键“0x0a”后开始计数,按下按键“0x0e”后计数暂停,按下按键“0x0e”后计数值进行清零。五、实验结果分析及注意事项1. c语言中利用键盘扫描可以较简单的实现中断的功能。2. 液晶屏对应的显示函数等编程要按一定的规范。实验三 串行通讯程序设计一、实验时间及地点电信学院西1楼,2011年11月27日二、实验目的掌握C8051单片机串行通讯程序设计方法。三、实验任务设计并调试一个串行通讯程序,利用单片串行端口将片外RAM中以3000H为起始地址的1024个字节通过串行发送端口
15、A输出,并以自闭环的形式由串行接收口B接收,并存储到以4000H为起始地址的空间中。四、实验原理1串行口硬件介绍C8051F020有2个增强型串行口,UART 0/1(Universal Asynchronous-Receiver and Transmitter)用于串行通信。它主要由发送缓冲器SBUF、接收缓冲器SBUF和移位寄存器、控制逻辑等部分组成。单片机串行口传送的字符格式及波特率等可由软件编程决定,其功能由送入串行口中相关的控制寄存器的控制字格式而定。UART 0/1有4种工作方式,通过设置串行口控制寄存器SCON0的SM0(D7)、SM1(D6)来进行选用。UART 0使用定时器1
16、时,波特率为:波特率= 式中:T1M为定时器1时钟选择位(CKON.4);TH1为定时器1的8位重载寄存器。UART 1使用定时器4时,波特率为: 波特率= 式中:为定时器4的重载寄存器。串行传输的速率(波特率)与主振频率和CPU内的定时器有关。此外,波特率的选择还与距离相关,距离越近,可选择的最大波特率越大。在本实验中以自闭环形式传送,故选择最大波特率11520Hz。2功能子函数介绍发送功能子函数1) 串口初始化; 2) 等待发送1个字节数据完成;3) 写入SBUF下一个要发送的数据;4) 清除中断标志TI。void Uart0_SendByte (unsigned char value)w
17、hile (!TI0); / 等待发送1个字节数据完成 SBUF0=value; / 发送数据到uart0TI0=0; / 清除中断标志串行口每发送完一帧数据后会自动置位中断请求标志位TI,这里利用此特点进行程序设计,即利用查询方式来查探传送过程,由于硬件不会自动清除中断请求标志位TI,故每次需要人为清零。 接收功能子函数 1) 串口初始化;2) 若接收完毕,从SBUF读出数据,否则返回0XFF。 unsigned char Uart0_ReceiveData (void)if (RI0)SCON0&=0x01; / 清除RI1标志位return SBUF0; return 0xff;串行口每
18、接收完一帧数据后会自动置位中断请求标志位RI,这里利用此特点进行程序设计,即利用查询方式来查探传送过程,由于硬件不会自动清除中断请求标志位RI,故每次需要人为清零。接收子函数中设置返回值便于程序检验,简单明了。3实现串口发送和接受要实现片外数据的传送与接受,可以通过两个外部数字指针,指向需要发送数据的位置和接收数据的位置,调用发送和接收函数,将1024个字节通过串行发送端口A输出,并以自闭环的形式由串行接收口B接收。为了保证发送和接收数据的准确性,发送或数据后延迟5ms。五、实验运行结果主程序流程图:系统初始化设置收发波特率发送(重发)数据接收数据延时延时设置存储器初始值(以便检测)YN开始是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机控制系统及其应用 西安 交大 微机 控制系统 及其 应用 实验 报告
链接地址:https://www.31ppt.com/p-3434048.html