单片机与PC通讯程序设计.doc_第1页
单片机与PC通讯程序设计.doc_第2页
单片机与PC通讯程序设计.doc_第3页
单片机与PC通讯程序设计.doc_第4页
单片机与PC通讯程序设计.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

电子信息系统综合设计实验报告姓名:兰 建学号:20082289班 级:电0804-2分院:电气与电子工程分院2011年7月10日一、 实验目的:1. 学习利用ADC0809实现模数转换的方法2. 学习C语言编写单片机串口通讯程序3. 学习用VB编写与PC通讯的程序二、 实验环境:1.一台装有伟福6000的计算机。2.伟福Lab2000p实验箱3.两条USB转串口的串口线三、实验内容: 实验题目1:查询方式判别转换完成的模数转换实验 实验题目2:中断方式判别转换完成的模数转换实验 实验题目3:采样周期由变量赋值设置的数据采集实验实验题目4:采样频率由键盘输入设置的数据采集实验(选作)实验题目5:采样频率由另一MCS-51通过串行通信设置的数据采集实验实验题目6:采样频率由基于Visual Basic 6.0开发的上位机程序( 运行于PC机)通过串行通信设置的数据采集实验,有能力的学生再实现数据的动态曲线显示和Access数据库存储四.实验结果1.采样频率由键盘输入设置的数据采集实验实验步骤:编写源程序并编译、连接,程序运行后:调节电位器输出的幅值,观察LED显示情况;观察指示灯闪烁频率(即采样频率),并与键盘输入的采样频率作对比,验证定时/计数器T0的设置是否正确。实验现象:数据采集结果(00FFH)在最右边2位LED显示 小灯跟随设置的频率闪烁程序流程图如下:实验源程序代码如下:/*写操作启动A/D转换,读操作得到转换结果由键盘输入采样频率(2位十进制数099Hz,各个位的数值分别送6字节显示缓冲区buff低两位)根据键盘输入的采样频率换算采样周期并初始化定时/计数器T0(方式1)定时时间到启动A/D转换,为了直观感受采样频率同时切换指示灯亮灭状态A/D转换结束后在ADC0809芯片的EOC引脚上产生下降沿跳变*/#include #include #include #define uchar unsigned char#define LEDLen 6xdata uchar con_0809 _at_ 0x9000; / AD控读入口xdata uchar OUTBIT _at_ 0x8002; / 位控制口xdata uchar OUTSEG _at_ 0x8004; / 段控制口xdata uchar IN _at_ 0x8001; / 键盘读入口uchar RcvBuf; / 接收缓冲uchar data n; /定时计数uchar data m;uchar data feq; /10ms的倍数uchar data key=0x00,0x00;uchar data LEDbuff6=0x00,0x00,0x00,0x00,0x00,0x00; code uchar LEDMAP = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71; / 八段管显示码code uchar KeyTable = 0x16, 0x15, 0x14, 0xff, 0x13, 0x12, 0x11, 0x10, 0x0d, 0x0c, 0x0b, 0x0a, 0x0e, 0x03, 0x06, 0x09, 0x0f, 0x02, 0x05, 0x08, 0x00, 0x01, 0x04, 0x07; / 键码定义sbit Flag_Read=P10; / 定时器中断标志sbit HasRcv =P11; / 接收标志sbit HasTxd =P12; / 发送标志sbit EOC=P13;/*延时函数*/void Delay(uchar CNT) uchar j; while (CNT- !=0) for (j=100; j !=0; j-);/*定时器中断服务程序*/void timer0() interrupt 1 m=100; TH0= (65536-5000)/256 ; TL0=(65536-5000)%256 ;/装载计数器初值10ms m=m/feq; /改变频率 if (n+=m) con_0809=0; /启动AD转换 while(EOC); /等待转换完成 Flag_Read=1; n=0; /*数码管显示函数*/void DisplayLED() uchar i; uchar Pos; uchar LED; Pos = 0x20; / 从左边开始显示 for (i = 0; i = 1; / 显示下一位 /*扫描按键按下情况*/uchar TestKey() OUTBIT = 0; / 输出线置为0 return (IN & 0x0f); / 读入键状态(高四位不用)/*获得按下按键键值*/unsigned char GetKey() uchar Pos; uchar j; uchar k; j = 6; Pos = 0x20; / 找出键所在列 do OUTBIT = Pos; Pos = 1; k = IN & 0x0f; while (-j != 0) & (k = 0);if (k != 0) / 键值 = 列 x 4 + 行 j *= 4; if (k & 2) j += 1; else if (k & 4) j += 2; else if (k & 8) j += 3; OUTBIT = 0; do Delay(10); /防抖动 while (TestKey(); / 等键释放 return(KeyTablej); / 取出键码 else return(0xff);void main() uchar i,volt; i=0; Flag_Read=0; n=0; feq=1; HasRcv=0; HasTxd=0; TMOD=0x01; / 定时器0工作于方式1 TH0=(65536-5000)/256; /装载计数器初值10ms TL0=(65536-5000)%256; ET0=1; EA=1; TR0=1; TR1=1; while(1) if (TestKey() /键盘输入采样频率 if(i2) /两位数值 keyi=GetKey(); LEDbuffi = LEDMAPkeyi; i+; if(i=2) feq=key0*10+key1; i=0; if(Flag_Read) /采样电压值 volt=con_0809; LEDbuff4=LEDMAP(volt/16); LEDbuff5=LEDMAP(volt%16); Flag_Read=0; DisplayLED(); 2.采样频率由另一MCS-51通过串行通信设置,同时采样频率由基于Visual Basic 6.0开发的上位机程序( 运行于PC机)通过串行通信设置的数据采集实验,再实现数据的动态曲线显示实验步骤:编写源程序并编译、连接,程序运行后:调节电位器输出的幅值,观察LED显示情况;观察指示灯闪烁频率(即采样频率),比较发送与接收的数据是否一致。观察上位机程序所绘制的数据动态曲线实验现象:数据采集结果(00FFH)在最右边2位LED显示接受采样频率(099Hz)在中间2位LED显示小灯跟随设置的频率闪烁程序流程图如下:实验源程序:#include #include #include #define uchar unsigned char#define LEDLen 6xdata uchar con_0809 _at_ 0x9000; / AD控读入口xdata uchar OUTBIT _at_ 0x8002; / 位控制口xdata uchar OUTSEG _at_ 0x8004; / 段控制口xdata uchar IN _at_ 0x8001; / 键盘读入口uchar RcvBuf; /接收缓冲uchar data n; /定时计数uchar data m; /计数初值uchar data feq; /10ms的倍数uchar data key=0x00,0x00;uchar data LEDbuff6=0x00,0x00,0x00,0x00,0x00,0x00;code uchar LEDMAP = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71; / 八段管显示码code uchar KeyTable = 0x16, 0x15, 0x14, 0xff, 0x13, 0x12, 0x11, 0x10, 0x0d, 0x0c, 0x0b, 0x0a, 0x0e, 0x03, 0x06, 0x09, 0x0f, 0x02, 0x05, 0x08, 0x00, 0x01, 0x04, 0x07; / 键码定义sbit Flag_Read=P10;/定时器中断标志sbit HasRcv =P11; / 接收标志sbit HasTxd =P12; / 发送标志sbit EOC=P13; /转换完成标志void Delay(uchar CNT) uchar j; while (CNT- !=0) for (j=100; j !=0; j-);/*定时器中断服务程序*/void timer0() interrupt 1 m=100; TH0= (65536-5000)/256 ; TL0=(65536-5000)%256 ; m=m/feq; if (n+=m) con_0809=0; while(EOC); Flag_Read=1; n=0; /*串口中断服务程序*/void SerialIO0() interrupt 4 if(RI) RI = 0; RcvBuf= SBUF; HasRcv=1; else TI = 0; HasTxd=1; /*数码管显示函数*/void DisplayLED() uchar i, Pos, LED; Pos = 0x20; / 从左边开始显示 for (i = 0; i = 1; / 显示下一位 /*扫描按键按下情况*/uchar TestKey() OUTBIT = 0; / 输出线置为0 return (IN & 0x0f); /*获得按下按键键值*/uchar GetKey() uchar Pos,j,k; j = 6; Pos = 0x20; / 找出键所在列 do OUTBIT = Pos; Pos = 1; k = IN & 0x0f; while (-j != 0) & (k = 0); / 键值 = 列 x 4 + 行 if (k != 0) j *= 4; if (k & 2) j += 1; else if (k & 4) j += 2; else if (k & 8) j += 3; OUTBIT = 0; do Delay(10); while (TestKey(); / 等键释放 return(KeyTablej); / 取出键码 else return(0xff);void main() uchar i,volt; i=0; Flag_Read=0; n=0; /定时计数 feq=1; /10ms的倍数 HasRcv=0; HasTxd=0; PCON=0x80; / SMOD 位清零 SCON=0x50; / 串行口工作方式1 TMOD=0x21; /定时器0工作于方式1与定时器1工作于方式2(8位重装) TH0=(65536-5000)/256 ; TL0=(65536-5000)%256 ; TH1=0xF3; TL1=0xF3;/ 波特率2400BPS 6MHz IP=0x10; ET0=1; ES=1; EA=1; TR0=1; TR1=1; while(1) /键盘输入采样频率 if (TestKey() if(i2) keyi=GetKey(); LEDbuffi=LEDMAPkeyi; i+; if(i=2) feq=key0*10+key1; SBUF=feq;/发送采样频率 i=0; if(HasRcv) /接收采样频率 feq=RcvBuf; LEDbuff2=LEDMAPfeq/10; LEDbuff3=LEDMAPfeq%10; HasRcv=0; HasTxd=0; if(Flag_Read) /采样电压值 volt=con_0809; SBUF=volt; LEDbuff4=LEDMAP(volt/16); LEDbuff5=LEDMAP(volt%16); Flag_Read=0;DisplayLED();运行于PC机的上位机程序:uart.exePublic fas,X1,X2,X3,Y1,Y2,t,port, k, iPrivate Sub Form_Load()X1 = 0Y1 = 190MSComm1.RThreshold = 1 每次接受一个字符MSComm1.InputLen = 1 每次从接受缓冲区取一个字符MSComm1.InputMode=comInputModeBinary 以二进制形式读取End SubPrivate Sub Form_Click()Form1.Scale (-3, 100)-(50, 200)Form1.Line (0, 190)-(50, 190) x轴Form1.Line (0, 190)-(0, 150) y轴Form1.CurrentX = -2Form1.CurrentY = 149Form1.Print YForm1.CurrentX = 48Form1.CurrentY = 190Form1.Print TForm1.CurrentX = 0Form1.CurrentY = 190Form1.Print 0End SubPrivate Sub Command1_Click()发送采样频率fas = Chr(Text1.Text)返回ASCII码对应的字符MSComm1.Output = fask = TrueTimer1.Enabled = Truet = 0X3 = 0End SubPrivate Sub Command2_Click() 关闭串口MSComm1.PortOpen = FalseUnload MeEndEnd SubPrivate Sub Command3_Click()port = Val(Text4.Text)MSComm1.CommPort

温馨提示

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

评论

0/150

提交评论