《单片机实验报告》word版.doc

上传人:jian****018 文档编号:9043981 上传时间:2020-04-02 格式:DOC 页数:28 大小:3.82MB
返回 下载 相关 举报
《单片机实验报告》word版.doc_第1页
第1页 / 共28页
《单片机实验报告》word版.doc_第2页
第2页 / 共28页
《单片机实验报告》word版.doc_第3页
第3页 / 共28页
点击查看更多>>
资源描述
实 验 报 告 课程名称 计算机测控技术 实验项目 单片机 实验仪器 keil4.0 系 别 仪器科学与光电工程 专 业 测控技术与仪器 班级/学号 学生姓名 实验日期 成 绩 指导教师 实验一 单片机程序设计基础一实验设备硬件使用的是单片机SS-8051高级单片机实验仪,软件使用的是Keil uv2软件开发环境。二 实验目的 熟悉单片机的调试环境与指令系统三实验内容 自编一个汇编小程序,使用Keil uv2软件开发环境,进行编译、调试、运行程序。Keil uv2 操作流程的简单说明:1 NEW PROJECT ,建一个新的项目,取项目名并存于F:盘下(最好在F盘下建一个自己的文件夹)。在出现的对 话框中选Atmel/AT89c51 芯片型号;或者可以从File/ devices database 的对话框中选择芯片型号。2 FILE/ NEW ,建立一个新文件,在打开的窗口下输入程序,取文件名并存盘。3 选中Source Group1点击鼠标右键,在出现的菜单中选中 Add Files to Group Source Group1,将文件加入到项目中。4 选中Target1点击鼠标右键,在出现的菜单中选中Options for Target Target1:l 在出现的对话框中打开output项的对话框,选中Great HEX File,以保证编译时能生成.HEX文件,为后续下载程序做准备。l 在出现的对话框中打开debug项的对话框,选中Use “keil monitor 51-driver”,并将其下的选项均选中系统处于在线下载调试状态。5 Project/Build target或Rebuild all target files, 编译所输入的程序,检查语法错误,更改错误直至无错为止。6 Debug/ Start/Stop Debug Session ,开始调试程序,单步或断点运行程序额,检查逻辑错误。4 实验程序#include unsigned int code chOriginalSet10=30,30,550,30,8,30,550,30,8,1; /*阀序时间间隔设置*/unsigned char code chFarXu9=0x00,0x51,0x55,0x45,0x80,0x62,0x6a,0x4a,0x80; /*阀序*/void delay(unsigned int times);main() unsigned char i; while(1) for(i=1;i9;i+) P1=chFarXui; delay(chOriginalSeti); void delay(unsigned int times) unsigned int i,j,t; t=10000; for(i=0;itimes;i+) for(j=0;jt;j+); /*10个机器周期 对于 12MHz,10us */ 实验二 51单片机的串行通信实验一 实验内容连线并编制程序,完成单片机与PC机通信的功能。 二 实验目的 1. 了解单片机串口通信的基本功能;2. 了解单片机与PC机串口通信的硬件接口电路;3. 学会单片机和PC机串口程序的编制和调试。三 实验电路四连线方法 电路单元2单元7单元14单元连接一P30R1O连接二P31T1I连接三T1O接P2连接四R1I接P3连接五GNDP55 常用的各种波特率设置表波特率振荡频率SMODTIMERC/T模式自动装入480012M1020F3H240012M0020F3H120012M1020F6H19200110592M1020FDH9600110592M0020FDH4800110592M0020FAH2400110592M0020F4H1200110592M0020E8H6 实验程序1、汇编程序ORG00HAJMPSTART;设置主程序地址ORG30HSTART:MOVSP,#60H;设置SP的值MOVTH1,#0FeH;设置波特率为9600MOVTL1,#0FeHMOVTMOD,#00100000B;选择计时器1方式2产生波特率MOVIE,#00H;禁止所有的中断,采用查询方式MOVSCON,#01010000B;设置串口为方式1,接收允许SETBTR1;启动定时器1AGAIN:ACALL IN;接收字符子程序ACALLOUT;回送字符子程序AJMPAGAIN;循环out:movsbuf,a;发送字符子程序wait:jbc ti,end1;发送完毕返回sjmpwait;否则等待TI=1end1:retin:jbcri,end2;接收到字符(RI=1)时启动接收sjmpin;否则查询是否接收到字符end2:mova,sbuf;启动接收retEND ;程序结束 2、 C语言程序程序清单(C51):#include#include typedef unsigned char Byte;BytedataAA;voidOUT(void)SBUF=AA;/*发送字符子程序*/wait:if(TI=1)TI=0;goto end1;/*发送完毕返回*/gotowait;/*否则等待TI=1*/end1:_nop_();void IN(void)in1:if(RI=1)RI=0;goto end2;/*接收到字符(RI=1)时启动接收*/goto in1;/*否则查询是否接收到字符*/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();/*回送字符子程序*/goto AGAIN;/*循环*/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.9734.0293.5003.0052.4991.9991.5041.0010.502F(Hz)6.645.384.634.003.322.662.001.320.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,则(216X)*1=50000uS求出X=15536化为十六进制:X=3CB0H,故初始值为:TH1=3CH,TL1=B0H。2. 初始化程序包括定时器初始化和中断系统初始化,主要对IP,IE,TCON,TMOD的相应位进行正确的设置,并将时间常数送入定时器中。由于只有定时器中断,IP不必设置。注意一点:定时器1初始化时建议用如下的指令:ANLTMOD,#0FHORLTMOD,#10H3. 设计中断服务程序和主程序中断服务程序除了要完成计数减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.5DATA,/KEY,/CS,/CLK(JP38.2-JP38.5)连接二左边的DG0-DG56G-1G连接三SA-DPB7-B0连接四右边的DG0-DG3C0-C3连接五SA-SCC4-C6连接六JP16跳线接GND另外,在实验之前,应将8单元的U7(7406)和U6(74LS245)芯片取下,因7279已经有直接驱动数码管的能力,如果另外放置驱动芯片,反而会影响数码管的显示效果。六 实验程序程序清单(C51):#include/*C51内部资源定义*/#include typedef unsigned char Byte;/*下面的程序中用Byte代替unsigned char*/bdata Byte BIT_COUNT,TIMER,TIMER1,TEN,DATA_IN,DATA_OUT,AA,BB;sbit data_in0=DATA_IN0;sbit data_out7=DATA_OUT7;sbit DAT=P12;/*HD7279A的DATA连接于P1.2*/sbit KEY=P13;/*HD7279A的KEY(键盘中断信号)连接于P1.3*/sbit CS=P14;/*HD7279A的CS(片选信号)连接于P1.4*/sbit CLK=P15;/*HD7279A的CLK连接于P1.5*/void SEND(void);/*发送*/void LONG_DELAY(void);/*长延时*/void SHORT_DELAY(void);/*短延时*/void RECEIVE(void);/*接收*/void main(void)/*主程序*/START:_nop_();/*启动,短延时几微秒*/P1=0xDB; /*给P1赋值0xDB*/TIMER=50;/*定时50秒*/START_DELAY:TIMER1=255;/*定时255秒*/START_DELAY1:TIMER1-;/*/if(TIMER10)goto START_DELAY1;/*如果TIMER1大于0跳转到START_DELAY1*/TIMER-;/*/if(TIMER0)goto START_DELAY;/*如果TIMER大于0跳转到START_DELAY*/DATA_OUT=0xA4; /*给DATA_OUT赋值0xA4*/SEND(); /*发送数据*/CS=1; /*片选置1*/MAIN1:if(KEY=1)goto MAIN1; /*如果键盘中断信号为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)goto WAIT;goto MAIN1; /*如果KEY为0,跳转到WAIT,否则跳转到MAIN1*/void SEND(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_COUNT0)goto SEND_LOOP;/*DJNZBIT_COUNT,SEND_LOOP; DAT=0;/*将DAT清0*/ void LONG_DELAY(void)/*长延时子程序*/TIMER=25; /*定时25秒*/DELAY_LOOP:TIMER-;/*延时循环*/if(TIMER0)goto DELAY_LOOP;/*如果TIMER大于0,跳转到DELAY_LOOP*/*RET*/void SHORT_DELAY(void)/*短延时子程序*/TIMER=4;/*MOVTIMER,#4; /*/DELAY_LOOP1:TIMER-;/*延时循环*/if(TIMER0)goto DELAY_LOOP1;/*如果TIMER大于0,跳转到DELAY_LOOP1*/void RECEIVE(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_COUNT0)goto RECEIVE_LOOP;/*如果BIT_COUNT大于0,跳转到DELAY_LOOP*/DAT=0;/*CLR DAT*/七 实验截图实验六 电机调速控制实验一 实验内容 连线并编制程序,产生脉冲信号,控制直流电动机的运行。 二. 实验目的 1 掌握采用单片机控制直流电动机的硬件接口技术。2 掌握直流电动机驱动程序的设计与调试方法。3 熟悉直流电动机的工作特性。 三. 实验电路4 连线方法 电路单元2单元电机单元电机单元连接一P10-P13AD4-AD7连接二GNDCS1连接三GNDGND(有跳线)连接四VCCVCC(有跳线)5 实验程序#includetypedef unsigned char Byte;sbit PAA=P10;sbit PBB=P12;sbit PCC=P11;sbit PDD=P13;/设置引脚void DelayXms()/延时程序int i,j;for(i=0;icount;i+)for(j=0;j100;j+)/更改此处可以改变电动机转速void main(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,#00HMOVXDPTR,AA中为何内容是不重要的,这是一次虚拟写。中断方式下,A/D转换结束后会自动产生EOC信号,将其与8031INTO相接。中断处理程序中,使用如下指令即可读取A/D转换结果:MOVDPTR,#00HMOVXA,DPTR四实验原理图:l Enable: 输出允许信号位五连线方法:电路单元2单元4单元7单元11单元13单元连接1P00 -P07DB0-DB7MSB20-MSB27(转换后得8位数字量)连接2P22-P20(0809地址控制位)C-A(138的输入)连接3Y0CS2连接4ALEALECLK连接5P32/I0EOC(转换结束标志位)连接6P1.0-P1.7L1-L8(8位数字量显示灯)连接7A2-A0ADDC-ADDA(0809地址位)连接8P36/WR,P37/RDWR2,/RD(联合控制0809启动位Start;控制地址锁存有效位ALE)见上原理图连接9E1,E2接地连接10O0连接IN0(输入的电压值)连接11CEBVCC,E3六程序框图:这里给出软件延时方法的程序框图和程序:初始化启动AD转换软件延时PPPPPPP3P3.5CHANSHENG 读取转换结果送P1口显示结果七实验程序#include#includeint f,f0;void main() TMOD=0X51; TH0=0X9E; TL0=0X58; TH1=0X00; TL1=0X00; ET0=1; EA=1; TR0=1; TR1=1; while(1);void time1() interrupt 1 using 2 EA=0; TR0=0; TR1=0; f=TL1+TH1*256; f0=f*2; 八 实验截图实验八 微型打印机接口控制实验一 实验内容:将实验仪接上微型打印机,控制打印机打印出各种效果的汉字和字符。二 实验目的:1 了解微型打印机接口及其打印字符的方法;2 了解微型打印机打印汉字的方法;3 了解单片机与微型打印机的连线方法。三 有关说明: l 并行接口连接接口与引脚定义:本系列打印机并口与CENTRONICS 兼容,支持BUSY/ACK 握手协议,接口插座如下图:并行接口各引脚信号的定义如下图表所示:注: 1.“入”表示输入到打印机。 2.“出”表示从打印机输出。 3.信号的逻辑电平为TTL 电平。l 并行接口引脚信号时序并口时序如下图所示:四 实验电路: 五 连线方法: 电路单元第2单元打印机连接1P0.0-P0.7Data1-Data8(3,5,7,9,11,13,15,17)连接2P3.7 /STB(1)连接3P3.2(INT0)BUSY(21)连接4Gnd18六 实验程序l 单片机控制打印机时汇编例程BUSY EQU P3.2 ; 定义BUSY 信号引脚nSTB EQU P3.7 ; 定义nSTB 信号引脚JB BUSY, $ ; 等待打印机到空闲MOV P1 , A ; 送数据到数据口CLR nSTB ; 置nSTB 为低电平NOP ; 延长nSTB 信号脉冲宽度以满足时序要求nopnopSETB nSTB ; 置nSTB 为高电平(此时数据将被读入打印机)RETprint_content:DB 北京炜煌DB 0dhENDl 单片机C51 例程/ 北京炜煌科技打印机示例程序/ Nocky Tian/ 2007-07-17#include / Hardware configuration#define PRINTER_DATA P1 / 定义打印机数据线端口sbit BUSY = P32; / 定义打印机忙信号引脚sbit nSTB = P37; / 定义打印机nSTB 信号引脚sbit PE = P33; / 定义打印机纸状态检测信号引脚sbit nACK = P32; / 定义打印机应答信号引脚sbit nERR = P31; / 定义打印机错误检测信号引脚sbit nSEL = P30; / 定义打印机在线检测信号引脚#define CR 0x0d#define LF 0x0avoid PrintByte(unsigned char byte_data);void PrintString(char* str);void PrintByteN(unsigned char* data_src,unsigned char N);void main(void)char str = Printer demo;PrintString(北京炜煌WH);PrintByte(CR);while(1);/* PrintByte()* Send a byte to printer* Nocky Tian 2006-7-17*/#include void PrintByte(unsigned char byte_data)while( BUSY = 1 )PRINTER_DATA = byte_data;nSTB = 0;_nop_(); / 调整nSTB 信号脉宽nSTB = 1;/* PrintString()* Print a string which is ending with a 0 character* To Excuted the print command a addition CR character is needed* Nocky Tian 2006-7-17*/void PrintString(char* str)while( *str )PrintByte( *(str+);/* PrintByteN()* Print N bytes through printer* no more than 255 bytes could be printed by the function* If more than 255 bytes need printing, the type of N need changing* to unsigned int, even unsigned long if necessary.* Nocky Tian 2006-07-17*/void PrintByteN( unsigned char* data_src, / pointer to data sourceunsigned char N) / number of data(byte)while( N-)PrintByte(*(data_src+);七 实验截图
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!