单片机实验报告.docx
- 文档编号:25987300
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:33
- 大小:1.14MB
单片机实验报告.docx
《单片机实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实验报告.docx(33页珍藏版)》请在冰豆网上搜索。
单片机实验报告
实验报告
课程名称计算机测控技术
实验项目单片机
实验仪器keil4.0
系别仪器科学与光电工程
专业测控技术与仪器
班级/学号
学生姓名
实验日期
成绩
指导教师
实验一单片机程序设计基础
一.实验设备
硬件使用的是单片机SS-8051高级单片机实验仪,软件使用的是Keiluv2软件开发环境。
二.实验目的
熟悉单片机的调试环境与指令系统
三.实验内容
自编一个汇编小程序,使用Keiluv2软件开发环境,进行编译、调试、运行程序。
Keiluv2操作流程的简单说明:
1.NEWPROJECT↙,建一个新的项目,取项目名并存于F:
盘下(最好在F盘下建一个自己的文件夹)。
在出现的对话框中选Atmel/AT89c51芯片型号;或者可以从File/devicesdatabase的对话框中选择芯片型号。
2.FILE/NEW↙,建立一个新文件,在打开的窗口下输入程序,取文件名并存盘。
3.选中SourceGroup1点击鼠标右键,在出现的菜单中选中AddFilestoGroup`SourceGroup1`,将文件加入到项目中。
4.选中Target1点击鼠标右键,在出现的菜单中选中OptionsforTarget`Target1`:
●在出现的对话框中打开output项的对话框,选中`GreatHEXFile`,以保证编译时能生成.HEX文件,为后续下载程序做准备。
●在出现的对话框中打开debug项的对话框,选中`Use“keilmonitor51-driver”,并将其下的选项均选中系统处于在线下载调试状态。
。
5.Project/Buildtarget或Rebuildalltargetfiles,编译所输入的程序,检查语法错误,更改错误直至无错为止。
6.Debug/‘Start/StopDebugSession’↙,开始调试程序,单步或断点运行程序额,检查逻辑错误。
4.实验程序
#include
unsignedintcodechOriginalSet[10]={30,30,550,30,8,30,550,30,8,1};/*阀序时间间隔设置*/
unsignedcharcodechFarXu[9]={0x00,0x51,0x55,0x45,0x80,0x62,0x6a,0x4a,0x80};/*阀序*/
voiddelay(unsignedinttimes);
main()
{
unsignedchari;
while
(1)
{
for(i=1;i<9;i++)
{
P1=chFarXu[i];
delay(chOriginalSet[i]);
}
}
}
voiddelay(unsignedinttimes)
{
unsignedinti,j,t;
t=10000;
for(i=0;i { for(j=0;j 12MHz,10us*/ } } 实验二51单片机的串行通信实验 一.实验内容 连线并编制程序,完成单片机与PC机通信的功能。 二.实验目的 1.了解单片机串口通信的基本功能; 2.了解单片机与PC机串口通信的硬件接口电路; 3.学会单片机和PC机串口程序的编制和调试。 三.实验电路 四.连线方法 电路单元 2单元 7单元 14单元 连接一 P30 R1O 连接二 P31 T1I 连接三 T1O接P2 连接四 R1I接P3 连接五 GND P5 5.常用的各种波特率设置表 波特率 振荡频率 SMOD TIMER C/T 模式 自动装入 4800 12M 1 0 2 0F3H 2400 12M 0 0 2 0F3H 1200 12M 1 0 2 0F6H 19200 11.0592M 1 0 2 0FDH 9600 11.0592M 0 0 2 0FDH 4800 11.0592M 0 0 2 0FAH 2400 11.0592M 0 0 2 0F4H 1200 11.0592M 0 0 2 0E8H 6.实验程序 1、汇编程序 ORG00H AJMPSTART;设置主程序地址 ORG30H START: MOVSP,#60H;设置SP的值 MOVTH1,#0FeH;设置波特率为9600 MOVTL1,#0FeH MOVTMOD,#00100000B;选择计时器1方式2产生波特率 MOVIE,#00H;禁止所有的中断,采用查询方式 MOVSCON,#01010000B;设置串口为方式1,接收允许 SETBTR1;启动定时器1 AGAIN: ACALLIN;接收字符子程序 ACALLOUT;回送字符子程序 AJMPAGAIN;循环 out: movsbuf,a;发送字符子程序 wait: jbcti,end1;发送完毕返回 sjmpwait;否则等待TI=1 end1: ret in: jbcri,end2;接收到字符(RI=1)时启动接收 sjmpin;否则查询是否接收到字符 end2: mova,sbuf;启动接收 ret END;程序结束 2、C语言程序 程序清单(C51): #include #include typedefunsignedcharByte; BytedataAA; voidOUT(void) { SBUF=AA;/*发送字符子程序*/ wait: if(TI==1) { TI=0; gotoend1; }/*发送完毕返回*/ gotowait;/*否则等待TI=1*/ end1: _nop_(); } voidIN(void) { in1: if(RI==1) { RI=0; gotoend2; }/*接收到字符(RI=1)时启动接收*/ gotoin1;/*否则查询是否接收到字符*/ end2: AA=SBUF;/*启动接收*/ } voidmain(void) { TH1=0xF3;/*设置波特率为2400*/ TL1=0xF3;/*设置波特率为2400*/ TMOD=0x20;/*选择计时器1方式2产生波特率*/ IE=0;/*禁止所有的中断,采用查询方式*/ SCON=0x50;/*设置串口为方式1,接收允许*/ TR1=1;/*启动定时器1*/ AGAIN: IN();/*接收字符子程序*/ OUT();/*回送字符子程序*/ gotoAGAIN;/*循环*/ } 7.实验截图 实验三V/F转换电路实验 1、实验内容 V/F转换电路的调试。 2、实验要求 1、在了解LM331工作原理(转换原理)的基础上,考虑以下几个问题: 输入电压范围;输出频率范围;输入和输出间的对应关系。 2、调试电路,直至V/F转换器可以正确输出波形。 如果V/F转换器没有输出或输出波形不理想,请分析查找原因,并将波形调至等占空比。 3、用示波器、频率计等工具观察V/F转换器的输出波形,观察定标调整环节W1,W2和W3对波形的影响。 4、通过实测数据分析V/F转换器的线性,画出实际的V、F对应关系。 3、实验电路图 四、实验数据处理 V(V) 4.973 4.029 3.500 3.005 2.499 1.999 1.504 1.001 0.502 F(Hz) 6.64 5.38 4.63 4.00 3.32 2.66 2.00 1.32 0.67 实验四V/F转换的数据采集 一.实验内容 连线并编制程序: 使用定时器和计数器完成LM331脉冲输出信号的采集功能,对采集的数据进行处理,最终得到频率值。 二.实验目的 1.定时器中断的使用; 2.学习定时器中断间隔时间的计算; 3.掌握计数器的使用方法; 4.学习中断处理程序的编程方法。 三.原理简述 1.定时器/计数器的输入脉冲周期与机器周期一样,为振荡器频率的1/12。 本实验中时钟频率为12M,现要采用中断方法来实现1秒延时,要在定时器1中设置一个时间常数,使其每隔0.05秒产生一次中断,CPU响应中断后R0中计数值减一,令(R0)=14H,即可实现1秒的延时, 时间常数可按下法确定: 机器周期=12/晶振频率=12/12=1uS 定时器需设初值为X,则(2^16—X)*1=50000uS 求出X=15536 化为十六进制: X=3CB0H,故初始值为: TH1=3CH,TL1=B0H。 2.初始化程序 包括定时器初始化和中断系统初始化,主要对IP,IE,TCON,TMOD的相应位进行正确的设置,并将时间常数送入定时器中。 由于只有定时器中断,IP不必设置。 注意一点: 定时器1初始化时建议用如下的指令: ANLTMOD,#0FH ORLTMOD,#10H 3.设计中断服务程序和主程序 中断服务程序除了要完成计数减1工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。 主程序则对计数器的数值进行处理,转换成频率值。 实验五7279键盘显示控制实验 一.实验题目 连线并编制程序,将HD7279A的全部编码送HD7279A显示,以一秒钟为间隔显示下一位,以前的显示内容左移。 二.实验目的 1.了解HD7279A键盘显示芯片的基本应用; 2.掌握HD7279A键盘显示芯片的接口电路及编程方法。 三.原理简述 HD7279A是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。 HD7279A内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式,此外还有多种控制命令,如消隐、闪烁、左移、右移、段寻址等。 命令的具体形式可查阅HD7279A相关的技术资料。 四.实验电路 五.连线方法 电路单元 2单元 6单元 8单元 9单元 连接一 P1.2-P1.5 DATA,/KEY,/CS,/CLK (JP38.2-JP38.5) 连接二 左边的DG0-DG5 6G-1G 连接三 SA-DP B7-B0 连接四 右边的DG0-DG3 C0-C3 连接五 SA-SC C4-C6 连接六 JP16跳线接GND 另外,在实验之前,应将8单元的U7(7406)和U6(74LS245)芯片取下,因7279已经有直接驱动数码管的能力,如果另外放置驱动芯片,反而会影响数码管的显示效果。 六.实验程序 程序清单(C51): #include #include typedefunsignedcharByte;/*下面的程序中用Byte代替unsignedchar*/ bdataByteBIT_COUNT,TIMER,TIMER1,TEN,DATA_IN,DATA_OUT,AA,BB; sbitdata_in0=DATA_IN^0; sbitdata_out7=DATA_OUT^7; sbitDAT=P1^2;/*HD7279A的DATA连接于P1.2*/ sbitKEY=P1^3;/*HD7279A的KEY(键盘中断信号)连接于P1.3*/ sbitCS=P1^4;/*HD7279A的CS(片选信号)连接于P1.4*/ sbitCLK=P1^5;/*HD7279A的CLK连接于P1.5*/ voidSEND(void);/*发送*/ voidLONG_DELAY(void);/*长延时*/ voidSHORT_DELAY(void);/*短延时*/ voidRECEIVE(void);/*接收*/ voidmain(void)/*主程序*/ { START: _nop_();/*启动,短延时几微秒*/ P1=0xDB;/*给P1赋值0xDB*/ TIMER=50;/*定时50秒*/ START_DELAY: TIMER1=255;/*定时255秒*/ START_DELAY1: TIMER1--;/**/ if(TIMER1>0) gotoSTART_DELAY1;/*如果TIMER1大于0跳转到START_DELAY1*/ TIMER--;/**/ if(TIMER>0) gotoSTART_DELAY;/*如果TIMER大于0跳转到START_DELAY*/ DATA_OUT=0xA4;/*给DATA_OUT赋值0xA4*/ SEND();/*发送数据*/ CS=1;/*片选置1*/ MAIN1: if(KEY==1) gotoMAIN1;/*如果键盘中断信号为1,跳转到MAIN1*/ DATA_OUT=0x15;/*DATA_OUT赋值0x15*/ SEND();/*发送*/ RECEIVE();/*接收*/ CS=1;/*片选为1*/ AA=DATA_IN;/*给AA赋值DATA_IN*/ if(AA==6)BB=1;/*如果AA为6,BB为1*/ if(AA==5)BB=2;/*如果AA为5,BB为2*/ if(AA==4)BB=3;/*如果AA为4,BB为3*/ if(AA==14)BB=4;/*如果AA为14,BB为4*/ if(AA==13)BB=5;/*如果AA为13,BB为5*/ if(AA==12)BB=6;/*如果AA为12,BB为6*/ if(AA==22)BB=7;/*如果AA为22,BB为7*/ if(AA==21)BB=8;/*如果AA为21,BB为8*/ if(AA==20)BB=9;/*如果AA为20,BB为9*/ if(AA==30)BB=11;/*如果AA为30,BB为11*/ if(AA==29)BB=0;/*如果AA为29,BB为0*/ if(AA==28)BB=12;/*如果AA为28,BB为12*/ TEN=0;/*MOVTEN,A*/ DATA_OUT=0xA1;/*MOVDATA_OUT,#10100001B*/ SEND();/*CALLSEND*/ DATA_OUT=0xA1;/*MOVDATA_OUT,#10100001B*/ SEND();/*CALLSEND*/ DATA_OUT=0x81;/*MOVDATA_OUT,#10000001B*/ SEND();/*CALLSEND*/ DATA_OUT=TEN;/*MOVDATA_OUT,TEN*/ SEND();/*CALLSEND*/ DATA_OUT=0x80;/*MOVDATA_OUT,#10000000B*/ SEND();/*CALLSEND*/ DATA_OUT=BB;/*MOVDATA_OUT,B*/ SEND();/*CALLSEND*/ CS=1;/*片选信号置1*/ WAIT: if(KEY==0) gotoWAIT; gotoMAIN1;/*如果KEY为0,跳转到WAIT,否则跳转到MAIN1*/ } voidSEND(void)/*发送子程序*/ { BIT_COUNT=8;/*统计为8*/ CS=0;/*片选置0*/ LONG_DELAY();/*长延时*/ SEND_LOOP: CY=data_out7;/*发送循环*/ DAT=CY;/*引脚的状态*/ CLK=1;/*时钟信号为1*/ AA=DATA_OUT;/*给AA赋值DATA_OUT*/ AA=_crol_(AA,1);/*_crol_函数在这里是把左边的一个零移到右边*/ DATA_OUT=AA;/*给DATA_OUT赋值AA*/ SHORT_DELAY();/*短延时*/ CLK=0;/*时钟信号为0*/ SHORT_DELAY;/*短延时*/ BIT_COUNT--; if(BIT_COUNT>0) gotoSEND_LOOP;/*DJNZBIT_COUNT,SEND_LOOP; DAT=0;/*将DAT清0*/ } voidLONG_DELAY(void)/*长延时子程序*/ { TIMER=25;/*定时25秒*/ DELAY_LOOP: TIMER--;/*延时循环*/ if(TIMER>0) gotoDELAY_LOOP;/*如果TIMER大于0,跳转到DELAY_LOOP*/ }/*RET*/ voidSHORT_DELAY(void)/*短延时子程序*/ { TIMER=4;/*MOVTIMER,#4;/**/ DELAY_LOOP1: TIMER--;/*延时循环*/ if(TIMER>0) gotoDELAY_LOOP1;/*如果TIMER大于0,跳转到DELAY_LOOP1*/ } voidRECEIVE(void)/*接收子程序*/ { BIT_COUNT=8;/*MOVBIT_COUNT,#8*/ DAT=1;/*SETBDAT*/ LONG_DELAY();/*CALLLONG_DELAY*/ RECEIVE_LOOP: CLK=1;/*SETBCLK*/ SHORT_DELAY();/*CALLSHORT_DELAY*/ AA=DATA_IN;/*MOVA,DATA_IN*/ AA=_crol_(AA,1);/*RLAA*/ DATA_IN=AA;/*MOVDATA_IN,A*/ CY=DAT;/*MOVC,DAT*/ data_in0=CY;/*MOVDATA_IN.0,C*/ CLK=0;/*CLRCLK*/ SHORT_DELAY();/*CALLSHORT_DELAY*/ BIT_COUNT--;/**/ if(BIT_COUNT>0) gotoRECEIVE_LOOP;/*如果BIT_COUNT大于0,跳转到DELAY_LOOP*/ DAT=0;/*CLRDAT*/ } 七.实验截图 实验六电机调速控制实验 一.实验内容 连线并编制程序,产生脉冲信号,控制直流电动机的运行。 二.实验目的 1.掌握采用单片机控制直流电动机的硬件接口技术。 2.掌握直流电动机驱动程序的设计与调试方法。 3.熟悉直流电动机的工作特性。 三.实验电路 4.连线方法 电路单元 2单元 电机单元 电机单元 连接一 P10-P13 AD4-AD7 连接二 GND CS1 连接三 GND GND(有跳线) 连接四 VCC VCC(有跳线) 5.实验程序 #include typedefunsignedcharByte; sbitPAA=P1^0; sbitPBB=P1^2; sbitPCC=P1^1; sbitPDD=P1^3;//设置引脚 voidDelayXms()//延时程序 { inti,j; for(i=0;i for(j=0;j<100;j++)//更改此处可以改变电动机转速 } voidmain(void)//主程序,循环,使电动机转 { P1=0x0; while (1) {PAA=0; DelayXms(10); PDD=1; DelayXms(10); PBB=0; DelayXms(10); PAA=1; DelayXms(10); PCC=0; DelayXms(10); PBB=1; DelayXms(10); PDD=0; DelayXms(10); PCC=1; DelayXms(10); } } 6.实验截图 实验七模/数转换实验 一.实验内容: 利用实验台上的ADC0809做A/D转换器,实验台上的电源和地提供模拟量输入,编制程序,将模拟量转换成数字量,用发光二极管显示。 二.实验目的: 1.掌握A/D转换与单片机的接口方法。 2.了解A/D芯片ADC0809转换性能及编程方法。 3.通过实验了解单片机如何进行数据采集。 三.实验原理简述: A/D转换器大致有三类: 一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。 实验用的ADC0809属于第二类,是八位A/D转换器。 每采集一次需100uS。 ADC0809START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号。 实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换。 故启动A/D转换只需如下两条指令: MOVDPTR,#00H MOVX@DPTR,A A中为何内容是不重要的,这是一次虚拟写。 中断方式下,A/D转换结束后会自动产生EOC信号,将其与8031INTO相接。 中断处理程序中,使用如下指令即可读取A/D转换结果: MOVDPTR,#00H MOVXA,@DPTR 四.实验原理图: ●Enable: 输出允许信号位 五.连线方法: 电路单元 2单元 4单元 7单元 11单元 13单元 连接1 P00-P07 DB0-DB7 MSB20-MSB27(转换后得8位数字量) 连接2 P22-P20(0809地址控制位) C-A(138的输入) 连接3 Y0 CS2 连接4 ALE ALE CL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告