单片机第三次实验
- 格式:pdf
- 大小:589.32 KB
- 文档页数:7
东南大学生物科学与医学工程学院单片机系统设计与应用实验报告第三次实验实验名称:数据传送实验专业:生物医学工程姓名:学号:同组人员:学号:实验室: 医用电子技术实验中心(综合楼716)实验时间:评定成绩:审阅教师:目录一、实验题目 (3)二、实验目的 (3)三、实验器材 (3)四、实验内容 (3)1.实验方案 (3)1.1方案流程图 (3)1.2源程序 (5)2.实验结果及分析 (12)2.1方案一结果 (12)2.2方案二结果 (12)2.3课上更改程序结果 (13)3. 程序调试 (14)五、心得体会 (14)六、参考文献 (14)一、实验题目1.将指定内存中的数按正负数分别存放于内存和外部RAM中,并对负数进行求补后再放入内存指定单元。
二、实验目的1.进一步掌握程序的编辑、汇编及调试方法;2.掌握单片机内部RAM和外部RAM的数据操作;3.了解单片机系统地址分配概念。
三、实验器材1、G6W仿真器一台2、MCS—51实验板一台3、PC机一台4、电源一台四、实验内容1.以数据表格形式在ROM中建立一个含有正数和负数的表格,数据长度为16个字节,要求放置八个正数、八个负数,正、负数应离散随机放置,不允许三个以上同类型数据连续放置,数据的具体内容自行确定;2.编制程序,将数据表格中的数据读出并按正、负数归类,正数送入首地址为40H的内部RAM中;负数送入首地址为0B000H的外部RAM中;3.将首地址为0B000H的外部RAM中的数据取出并求其绝对值,然后送入内部RAM 的48H~4FH单元。
1.实验方案1.1方案流程图1.2源程序本次试验,我先后写了两个程序,基本原理相似。
⑴先初始化,将各地址存入寄存器中,便于操作。
⑵查表取数,判断数的正负,将正负数分别存放在指定地址。
注意地址指针的入栈保护。
⑶判断数是否取完,取完后对存放在外RAM中的负数取出求补放入指定内存。
方案一ORG 0000HAJMP MAINORG 0030HMAIN:MOV SP,#70H ;设置堆栈指针MOV A,#10H ;保存个数MOV DPTR,#0E00H ;表地址MOV R0,#0B0H ;负数存放地址MOV 12H,#00HMOV R1,#40H ;正数存放地址START:PUSH A ;入栈保护PUSH DPHPUSH DPLMOV A,#00H ;寄存器A初始化MOVC A,@A+DPTR ;取表中数至寄存器A判断正负MOV 11H,A ;11H暂存数RLC A ;取标志位JC FUZHENG:MOV A,11HMOV @R1,A ;送至正数地址单元INC R1 ;正数地址加1POP DPLPOP DPHPOP AINC DPL ;指向表中下一个数DEC A ;个数减一JNZ START ;不为0继续操作JMP DO1 ;否则到DO1FU:MOV A,11HMOV DPH,R0 ;DPTR改为指向负数地址MOV DPL,12HMOVX @DPTR,A ;负数送外RAM中的负数地址中INC 12H ;指向下一个地址POP DPLPOP DPHPOP AINC DPL ;指向下一个地址DEC A ;个数减一JNZ STARTDO1:MOV A,#08H ;负数个数MOV DPTR,#0B000H ;指向负数所在首地址DO:PUSH AMOVX A,@DPTR ;取负数CPL A ;取反加1INC AMOV @R1,A ;送入48H地址INC R1INC DPTRPOP ADEC A ;个数减一JNZ DO ;没做完则重复SJMP $ORG 0E00H ;表TABLE:DB 17H,10H,81H,25HDB 0B2H,0A4H,30H,08HDB 0D6H,54H,01H,8FHDB 0C0H,27H,0CDH,0B1H方案二ORG 0000HAJMP MAINORG 0030HMAIN:MOV R0,#0F0H ;R0存放表的高位地址MOV R2,#00H ; R2存放表的低位地址MOV R1,#40H ; R1存放正数地址MOV R3,#10H ;R3存放数的个数MOV DPTR,#0B000H;外部RAM地址PUSH DPHPUSH DPLSTART:MOV DPH,R0 ;取表地址MOV DPL,R2CLR AMOVC A,@A+DPTR ;取数MOV R4,A ;数暂存于R4RLC A ;循环左移得标志位JC FU ;判断正负,若为负数则到FU ZHENG:MOV A,R4MOV @R1,A ;正数放入正数地址单元INC R1 ;地址加一INC R2DJNZ R3,START ;数没有取完则转STARTJMP END1 ;否则转END1FU:MOV A,R4POP DPLPOP DPHMOVX @DPTR,A ;取数INC DPTR ;地址加一PUSH DPHPUSH DPLINC R2DJNZ R3,START ;判断是否取完END1:MOV DPTR,#0B000H ;指向外部RAMMOV R5,#08H ;负数个数DO:MOVX A,@DPTR ;取数CPL A ;求补INC AMOV @R1,AINC R1INC DPTRDJNZ R5,DOORG 0F000H ;表DB 18H, 30H, 0A0H, 50HDB 87H, 0B2H, 1CH, 0D6HDB 28H, 8FH, 0C3H, 10HDB 1CH, 0CDH, 68H, 0D6H课上根据老师的要求,改变了外RAM地址,正数地址以及负数地址,程序如下。
单片机实验报告总结单片机实验报告总结单片机实验心得体会单片机实验心得体会时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。
在学习单片机这门课程之前,就早早的听各种任课老师和学长学姐们说过这门课程的重要性和学好这门课程的关键~~多做单片机实验。
这个学期,我们除了在课堂上学习理论知识,还在实验室做了7次实验。
将所学知识运用到实践中,在实践中发现问题,强化理论知识。
现在,单片机课程已经结束,即将开始考试了,需要来好好的反思和回顾总结下了。
第一次是借点亮LED灯来熟悉keil软件的使用和试验箱上器材。
第一次实验体现了一个人对新事物的接受能力和敏感度。
虽然之前做过许多种实验。
但依旧发现自己存在一个很大的问题,对已懂的东西没耐心听下去,容易开小差;在听老师讲解软件使用时,思路容易停滞,然后就跟不上老师的步骤了,结果需要别人再次指导;对软件的功能没有太大的热情去研究探索,把一个个图标点开,进去看看。
所以第一次试验相对失败。
鉴于此,我自己在宿舍下载了软件,然后去熟悉它的各个功能,使自己熟练掌握。
在做实验中,第二个问题应该是准备不充分吧。
一开始,由于没有课前准备的意识,每每都是到了实验室才开始编程,完成作业,导致每次时间都有些仓促。
后来在老师的批评下,认识到这是个很大的问题:老师提前把任务告诉我们,就是希望我们私下把程序编好。
于是我便在上机之前把程序编好,拷到U盘,这样上机时只需调试,解决出现的问题。
这样就会节约出时间和同学讨论,换种思路,换种方法,把问题给吃透。
发现、提出、分析、解决问题和实践能力是作为我们这个专业的基本素质。
三是我的依赖性很大,刚开始编程序时喜欢套用书上的语句,却对语句的理解不够。
于是当程序出现问题时,不知道如何修改,眼前的程序都是一块一块的被拼凑整合起来的,没法知道哪里错了。
但是编程是一件很严肃的事情,容不得半点错误。
于是便只能狠下决心,坚持自己编写,即使套用时,也把每条语句弄懂。
单片机实验第二次实验:图见实验题1.P1.0~P1.7这八个发光二极管全部点亮#include#define uchar unsigned char#define uint unsigned intsbit greenLed=P1^0;Delay(uint cnt){ uchar i;do{for(i=0;i<165;i++);}while(cnt--);}main(){ while(1){ greenLed=0;Delay(1000);greenLed=1;Delay(1000);}}2. P1.0~P1.7这八个发光二极管循环点亮#include delay(unsigned char cnt){ unsigned int i;do{for(i=0;i<6000;i++);}while(cnt--);}main(){ unsigned char a;P1=~a;while(1){if(a!=0){ delay(5);a<<=1;P1=~a;}else{a=0x01;P1=~a;}}}3.通过外部中断控制八盏灯分别右移,左移,闪烁,双灯同时左移。
#include#define uchar unsigned charuchar code LedTable[]= {0x03,0x0c,0x30,0xc0};uchar led_flag = 4;uchar a; Delay(uchar cnt){ unsigned int i;do{ for(i=0;i<6000;i++);}while(cnt--);}void Led_rr(void)//led右移函数{ uchar i;for(i=0;i<8;i++){ if(a == 0) a= 0x80;P1 = ~a;a >>= 1;}}void Led_rl(void)//led左移函数{ uchar i;for(i=0;i<8;i++){ if(a == 0) a= 0x01;P1 = ~a;a <<= 1;Delay(10);}}void Led_spark(void){ P1 = 0xff;Delay(10);P1 = 0;Delay(10);}void Led_lr_doble(){ uchar i;for (i=0;i<4;i++){ P1= ~LedTable[i];Delay(10);}}void int1(void) interrupt 2 //中断服务函数{ led_flag++;if(led_flag >= 3) led_flag = 0;}void main(void){ EA = 1;EX1 = 1;IT1 = 1;while(1){ if(led_flag ==4){ Led_spark();}if(led_flag == 0){ Led_rl();}if(led_flag == 1){ Led_rr();}if(led_flag == 2){ Led_lr_doble();}}第三次实验:1.设单片机的=12MHz,要求用定时器/计数器T0以方式1在P1.0脚上输出周期为4ms的方波。
东南大学自动化学院实验报告课程名称:MCU技术及课程设计第二次实验实验三:定时器输出PWM波形实验四:LED数码管的使用院(系):自动化专业:自动化姓名:学号:实验室:实验组别:同组人员:实验时间:2015 年5月7日评定成绩:审阅教师:实验三:定时器输出PWM波形一、实验目的与要求1.实验目的(1)学习MP430单片机的时钟原理和定时器使用方法。
(2)认识学习PWM波形的作用及原理。
2.实验要求编写程序输出1s周期的PWM波形,产生两路PWM波形从引脚P1.2和P1.3分别输出。
CCR0中的值定义了PWM信号的周期,CCR1,CCR2中的值定义了PWM信号的占空比。
定时使用32.768KHz的ACLK作为输入时钟源,P1.2上的占空比为75%,P1.3上的占空比为25%。
二、实验原理1)Timer_A定时器模块框图如图3-1所示。
由图3-1可知,Timer_A模块可以有三种时钟源输入。
分别是ACLK,SMCLK,TAxCLK。
时钟源的选择通过TASSEL信号来完成。
被选择的时钟源可以直接送给TIMER模块,或者通过ID信号进行2,4,8分频。
选择的时钟信号还可以通过TAIDEX信号进一步做2,3,4,5,6,7或者8分频。
当TACLK信号被设置的时候,TIMER 的时钟分频逻辑被复位。
图3-1Timer_A模块框图2)TimerA控制寄存器TA0CTL详细定义如图3-2所示。
图3-2TimerA控制寄存器TA0CTL3)定时器中断的中断向量中包含一个独立中断和若干个共源中断,Timer_A模块的中断分类如图3-3所示。
图3-3Timer_A模块的中断向量分类图1)独立中断源的中断处理TA0CCTL0=CCIE;//CCR0中断使能#pargmavector=TIMER0_A0_VECTOR//中断向量定义,可查询头文件得到__interruptvoidTIMER0_A0_ISR(void){//添加中断处理代码}2)共源中断向量寄存器TAxIV图3-4共源中断向量寄存器TAxIV共源中断程序switch处理方式:#pragma vector=TIMER0_A0_VECTOR//共源中断入口__interruptvoid TIMER0_A0_ISR(void){switch(__even_in_range(TA0IV,14))//共源中断处理{case0:fun_no();break;//Nointerruptcase2:fun_CCR1();break;//CCR1interruptcase4:fun_CCR2();break;//CCR2interruptcase6:fun_CCR3();break;//CCR3interruptcase8:fun_CCR4();break;//CCR4interruptcase10:fun_CCR5();break;//CCR5interruptcase12:fun_CCR6();break;//CCR6interruptcase14:fun_overflow();break; //overflowdefault:fun_default();break;//default}}3)PWM原理PWM技术的三个要素,具体如图3-5所示,PWM频率计算见图3-6。
目录实验一P1口输入、输出实验 (1)实验二P3口输出控制继电器实验 (4)实验三简单I/O实验(交通灯控制) (6)实验四外部中断实验(急救车与交通灯实验) (8)实验五定时器实验 (11)实验六8155输入输出实验 (13)实验七矩阵键盘实验 (15)实验八8279显示实验 (17)实验九串并转换实验 (20)实验十A/D转换实验 (22)实验十一步进电机控制实验 (24)实验十二D/A转换实验 (27)实验十三传送带控制系统综合实验 (29)实验十四机械手控制实验 (32)实验一 P1口输入、输出实验一.实验要求1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
延时时间500ms。
2.P1口做输入口,接八个开关,以74LS273作输出口,编写程序读取开关状态,将状态写入P0口,在发光二极管上显示出来。
二.实验目的1.学习P1口的使用方法。
2.学习延时子程序的编写和使用。
三.实验电路及连接实验1-1电路图如下:图1.1实验1-2中:P1.0-P1.7接八个按钮K1-K8,P0.0-P0.7接八个发光二极管L1-L8。
四.实验说明1.P1口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止,因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响,若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。
2.延时子程序的延时计算问题对延时子程序DELAY: MOV R0,#00HDELAY1: MOV R1,#0B3HDJNZ R1,$DJNZ R0,DELAY1查指令表可知MOV,DJNZ指令均需要两个机器周期,而一个机器周期时间长度为12/12MHZ(假设晶振频率是12MHZ),所以该段程序执行时间为:((0B3+1)*256+1)*2*12/12000000=100ms五.实验程序流程图实验要求1的程序框图:实验要求2的程序框图:图1.2 图1.3六、调试方法第一步:打开位于d:\单片机实验\实验一\1_1.uv2,进行实验1_1打开位于d:\单片机实验\实验一\1_2.uv2,进行实验1_2第二步:在资源管理器中如打开.src文件,在程序窗口中输入已编好的程序,保存。
单片机第三次实验思考题第一篇:单片机第三次实验思考题1、CJNE指令对CY 有影响吗?用CJNE 和JC/JNC指令配合应注意什么?在用JMP 指令前,若变址 255怎么办答:有。
CJNE指令的功能是对目的字节和源字节两个操作数进行比较,执行后不影响任何操作数,但影响Cy标志位,若目的字节>=源字节,Cy清0,否则Cy置1。
CJNE指令是对字节数进行操作,JC、JNC指令是以位累加器C的内容为转移条件,配合使用时应确定direct值,以便确认Cy值。
JMP指令将累加器A中的8位无符号数与16位数据指针相加,其和装入程序计数器PC,控制程序转向目标程序。
若变址>255,说明转移目标不在同一逻辑段内,应选择段间转移。
2、用什么指令可以实现多分支之间的隔离?控制、条件转移指令;JMP/CJNE/DJNE/JC/JB等。
3、程序中循环时间由什么来控制?循环时间由循环块内每一条命令的周期来共同确定。
4、若用DJNZ或CJNE指令来控制循环,编写程序有什么不同?CJNE指令是减1判别命令,需要在循环次数上加1来完成循环控制;CJNE则不需要。
第二篇:单片机实验实验一清0、移数将片内20H~2FH及片外0010H~001FH单元清0;然后将片内30H~3FH的数据移到片外0000H~000FH中;判断:若(30H)≤10,则求其平方存到31H中,并将位00H置1(其它位清0)若(30H)=10,则将AA存到31H中,并位01H置1(其它位清0)若(30H)≥10,则减10存到31H中,并位02H置1(其它位清0)实验二加法、排序有两个长度为10的无符号数分别放在片内20H和30H为首的存储单元中(低位),求其对应项之和(带进位位),结果放在40H为首的单元中(若最高位有进位则存在后续单元中),然后按升序排列放在50H为首的单元中实验三查表、散转设有一表格,表中数为:00H、11H、22H、33H、44H、55H、66H、77H、88H、99H、AAH、BBH、CCH、DDH、EEH、FFH。
学院:机械与电子工程学院单片机第三次实验报告专业:自动化班级:1121502学号:201120150229姓名:曾小燕实验任务:(1)使用单片机的P1、P3口控制驱动12个LED灯,要求编程使用软件延时的方法实现LED流动显示。
(2)在上面实验的基础上编写设计4种LED花样显示,编程实现顺序显示不同的花样。
实验电路和原理说明:从原理图中可以看出,如果要让接在P1.0口的led1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,其他11个LED的点亮和熄灭的方法同LED1。
编程思路:实验1:移位发。
先将p1,p3的所有位全置1。
把C清0。
然后带进位左移。
左一次,p1的0位亮。
左移两次,p1的1位亮。
同理,其他位也一样。
实验2:直接读p1和p3的位进行清零和置一可以实现各种要求。
程序流程图:实验1实验2使用的资源分配:R0,R1,R2,R7装循环次数。
堆栈起始地址为60H实验调试与结果分析:结果符合实验要求,对一那个1秒灯闪一次的要求,结果与硬件有关系。
实验总结:做完这次试验,我学会怎么简单的使用I/O口。
从此对单片机的兴趣也更加浓厚。
自己也会做各种花样流水灯了。
实验程序清单:实验1:ORG 0000 ;单片机上电后从0000H地址执行AJMP START;跳转到主程序存放地址处ORG 0040H;设置主程序开始地址START:MOV SP,#60H;设置堆栈起始地址为60HMOV A,#0FFH ;参数赋初值MOV P1,AMOV P3,AMOV R7,#12CLR CLOOP:MOV A,P1 ;把p1复制给ARLC A ;左移AMOV P1,A ;把A复制给p1MOV A,P3RLC AMOV P3,AACALL DELAY ;调用延时子程序DJNZ R7,LOOP ;判断循环是否结束AJMP START;移动完12次后跳到开始重来,以达到循环流动效果DELAY:MOV R0,#12 ;延时子程序D1:MOV R1,#207D2:MOV R2,#200D3:DJNZ R2,D3DJNZ R1,D2DJNZ R0,D1RET ;子程序返回END实验2:ORG 0000 ;单片机上电后从0000H地址执行AJMP START ;跳转到主程序存放地址处ORG 0040H ;设置主程序开始地址START:MOV SP,#60H ;设置堆栈起始地址为60HMOV A,#0FFH ;参数赋初值MOV P3,AMOV A,#0FEHMOV P1,AACALL DELAY ;调用延时子程序CLR P1.2 ;位操作ACALL DELAY ;调用延时子程序CLR P1.4ACALL DELAYCLR P1.6ACALL DELAYCLR P3.0ACALL DELAYCLR P3.2ACALL DELAYMOV A,#0FDHMOV P1,AMOV A,#0FFHMOV P3,AACALL DELAYCLR P1.3ACALL DELAYCLR P1.5ACALL DELAYCLR P1.7ACALL DELAYCLR P3.1ACALL DELAYCLR P3.3ACALL DELAYMOV A,#00HMOV P1,AMOV A,#0F0HMOV P3,AACALL DELAYAJMP START ;跳到开始重来,以达到循环流动效果DELAY:MOV R0,#255 ;延时子程序D1:MOV R1,#255D2:MOV R2,#5D3:DJNZ R2,D3DJNZ R1,D2DJNZ R0,D1RET ;子程序返回END。
单片机实验报告指导老师:***学院:机械学院专业:机械设计制造及其自动化专业学号:姓名:实验一汇编语言源程序编辑一、实验目的:了解软件μVision 4.0的安装,熟悉在μVision 4.0软件环境下进行单片机汇编源程序的编辑和修改,学会使用利用μVision 4.0软件监控单片机各个寄存器以及存储器的数据变化等。
二、实验内容:1、软件的安装和使用μVision 4.0软件的详细安装过程和使用说明请参考相关资料。
2、汇编源程序的编辑1)编辑和运行下面源程序,并按要求完成实验报告。
实验A 存储器块清零 S1.ASMBLOCK EQU 6000hMAIN:MOV DPTR,#BLOCK ; 起始地址MOV R0,#10H ;存储块长度CLR ALOOP:MOVX @DPTR,AINC DPTR ;指向下一个地址DJNZ R0,LOOP ;记数减一LJMP $END实验B 二进制到ASCII码转换 S2.ASM; 将A拆为二个 ASCII 码, 并存入 Result 开始的二个单元RESULT EQU 20HORG 0000HMAIN: MOV SP, #40HMOV A, #1AHCALL BinToHexLJMP $BinToHex:MOV DPTR, #ASCIITabMOV B,A ;暂存ASWAP AANL A, #0FH ;取高四位MOVC A, @A+DPTR ;查ASCII表MOV RESULT,AMOV A, B ;恢复AANL A, #0FH ;取低四位MOVC A, @A+DPTR ;查ASCII表MOV RESULT+1, ARETASCIITab: 30313233343536373839414243444546 DB '0123456789ABCDEF' ;定义数字对应的ASCII表END实验C 内存块移动 S3.ASMORG 0000HMAIN: MOV R0,#30hMOV R1,#00hMOV R2,#40hMOV R3,#00hMOV R7,#0LOOP: MOV DPH,R0MOV DPL,R1MOVX A,@DPTRMOV DPH,R2MOV DPL,R3MOVX @DPTR,ACJNE R1,#0FFH,GO1INC R0GO1: INC R1CJNE R1,#0FFH,GO2INC R2GO2: INC R3DJNZ R7,LOOPLJMP $END注意:源文件生成之后注意分别保存为s1.asm、s2.asm、s3.asm的文件名三、实验报告1、记录详细实验步骤1)双击μVision 4.0安装文件,同意条款,编辑信息,安装D盘,完成点击Finish 即可。
实验一:系统认识实验一、设计目的:1. 学习 Keil C51 集成开发环境的操作;2. 熟悉 TD-51 系统板的结构及使用。
二、设计内容:编写程序,将 00H~0FH 共 16 个数写入单片机内部 RAM 的 30H~3FH 空间。
三、设计步骤:1. 创建 Keil C51 应用程序(1)运行 Keil C51 软件,进入 Keil C51 集成开发环境。
(2)选择工具栏的 Project 选项,弹出下拉菜单,选择 NewProject 命令,建立一个新的μVision2 工程。
这时会弹出文件保存对话框,选择工程目录并输入文件名 Asm1 后,单击保存。
(3)工程建立完毕后,μVision2 会马上弹出器件选择窗口。
器件选择的目的是告诉μVision2 使用的 80C51 芯片的型号是哪一个公司的哪一个型号,不同型号的 51 芯片内部资源是不同的。
此时选择 SST 公司的 SST89E554RC。
(4)到此建立好一个空白工程,现在需要人工为工程添加程序文件,如果还没有程序文件则必须建立它。
选择工具栏的 File 选项,在弹出的下拉菜单中选择 New 目录。
(5)输入程序,完毕后点击“保存”命令保存源程序,将 Text1 保存成Asm1.asm。
Keil C51 支持汇编和 C 语言,μVision2 会根据文件后缀判断文件的类型,进行自动处理,因此保存时需要输入文件名及扩展名.ASM 或.C。
保存后,文件中字体的颜色会发生一定变化,关键字会变为蓝色。
(6)程序文件建立后,并没有与 Asm1.Uv2 工程建立任何关系。
此时,需要将 Asm1.asm 源程序添加到 Asm1.Uv2 工程中,构成一个完整的工程项目。
在Project Window 窗口内,选中Source Group1 点击鼠标右键,选择 Add Files to Group‘Source Group1’命令,此时弹出添加源程序文件对话框,选择文件Asm1.asm,点击 Add 命令按钮即可将源程序文件添加到工程中。
3.3汇编语言程序设计实验实验六 分支程序设计一、 实验目的1. 进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。
2. 掌握分支结构程序设计的方法。
3. 学会用条件转移指令、CJNE 、JMP 及其配合使用来编写二分支、三分支和多分支程序。
二、 实验内容1. 二分支的条件转移程序设变量X 存放于R0,函数值Y 存放在R1,其中X 、Y 均为二进制数。
试按照下式的要求给Y 赋值:程序框图如图3-5所示:Y= 1 X>0 0 X=0 -1 X<0:三、实验步骤1.根据实验内容和参考程序流程图,编出相应的分支结构程序。
2.输入程序,汇编成功;3.用F4(执行到光标处)、F7(跟踪执行)、F8(单步执行)或断点运行等方式调试程序;4.观察程序的流程,记录运行结果。
四、思考题1.CJNE指令对CY 有影响吗?用CJNE 和JC/JNC指令配合应注意什么?在用JMP 指令前,若变址 255怎么办?答:1)CJNE指令对CY 有影响。
CJNE (目的字节),(源字节),rel 功能:目的字节与源字节比较,相等则继续执行,不相等则转移,同时,若目的字节>=源字节,(C)=0若目的字节<源字节,(C)=12)选取好正确的direct值以便确定Cy的值3)提前设好变址,使变址<2552.用什么指令可以实现多分支之间的隔离?答:控制、条件转移指令,包括JMP、CJNE、DJNZ、JC、JB等,可以转移到$或其他。
五、实验报告要求写出题目运行结果。
六、参考程序清单1、二分支的条件转移程序1)用二分支结构程序实现:ORG 0000HMOV A, R0JZ LOAD ;等于零转LOADJNB ACC.7,GO ;大于零转GOMOV A, #0FFHSJMP LOADGO: MOV A, #01HLOAD: MOV R1, ASJMP $END运行结果:(R1)=0X002)赋值(R0)=15H运行结果: (R1)=0X013)赋值(R0)=0F2H2)用三分支结构程序实现:ORG 0000HMOV A, R0JNZ COMP ;不等于零转COMPMOV R1,#00H ;等于零,则0 →(R1)SJMP MP3COMP: CJNE R0,#80H,MP1 ;(R0)中数与80H比较,不相等则转移到MP1 MOV R1,#0FFH ;若比较相等,则-1 →(R1)LJMP MP3MP1: JC MP2 ;两数不相等,(R0)> 0转MP2MOV R1,#0FFH ;(R0) < 0,-1 →(R1)LJMP MP3MP2: MOV R1,#01H ;(R0)>0,1 →(R1)MP3: SJMP $END运行结果:(R1)=0X00 2)赋值(R0)=15H3)赋值(R0)=0F2H实验七循环程序设计一、实验目的1.进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。
课程名称:单片机实验题目:实验三定时实验学生姓名:专业:电子信息科学与技术班级:学号:指导教师:张涛实验三 定时器实验一、实验目的1、掌握单片机系统定时器断的原理及使用方法。
二、实验原理 (一)、单片机定时器/计数器的结构 1.定时器/计数器组成框图8051单片机内部有两个16位的可编程定时器/计数器,称为定时器0(T0)和定时器1(T1),可编程选择其作为定时器用或作为计数器用。
此外,工作方式、定时时间、计数值、启动、中断请求等都可以由程序设定,其逻辑结构如图所示。
_____INT1(P3.3)_____INT0(P3.2)T1(P3.5)T0(P3.4)图 8051定时器/计数器逻辑结构图由图可知,8051定时器/计数器由定时器 T0、定时器T1、定时器方式寄存器TMOD 和定时器控制寄存器TCON 组成。
2.定时/计数器的方式寄存器和控制寄存器定时/计数器的初始化通过定时/计数器的方式寄存器TMOD 和控制寄存器TCON 完成。
1)定时/计数器方式寄存器TMODTMOD 为T1、T2的工作方式寄存器,其格式如下:TMOD D7 D6 D5 D4 D3 D2 D1 D0(89H) TMOD 的低 (1(2)T /C :功能选择位。
0/C =时,设置为定时器工作方式;1/C =时,设置为计数器工作方式。
(3)GATE :门控位。
当GA TE=0时,软件控制位TR0或TR1置1即可启动定时器;当GATE=1时,软件控制位TR0或TR1须置1,同时还须0INT (P3.2)或1INT (P3.3)为高电平方可启动定时器,即允许外中断0INT 、1INT 启动定时器。
TMOD 不能位寻址,只能用字节指令设置定时器工作方式,高4位定义T1,低4位定义T0。
复位时,TMOD 所有位均置0。
2)定时器/计数器控制寄存器TCONTCON 的作用是控制定时器的启动、停止,标志定时器的溢出和中断情况。
定时器控制字TCON 的格式如下:TCON (88H ) 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H(1) TCON.7 TF1:定时器1溢出标志位。
《单片机课程第三次实验报告》
实验课程:单片机原理及应用—基于Proteus和Keil C
实验名称:指示灯循环控制
班级:计算机15—3班
学号:5011211301
姓名:赵禹
一、实验目的
熟悉u Vision3 编译软件,掌握C51编程与调试方法。
二、实验内容
(1)熟悉u Vision3 编译软件,了解软件结构与功能。
(2)完成实验3的C51语言编程。
(3)掌握在u Vision3 中进行C51程序开发的方法。
三、实验要求
提交实验报告并包括如下内容:电路原理图、C51源程序、仿真运行截图及实验小结。
四、实验仿真结果
1、电路原理图
2、仿真运行截图
3、源程序截图
五、实验小结
1、初步熟悉了u Vision3编译软件。
2、初步掌握了C51的编程与调试方法。
通过这次实验,让我对u Vision3编译软件了初步的认识,并且掌握了这款程序编译软件的基本操作方法。
单⽚机实验报告单⽚机原理及接⼝技术实验报告班级学号:姓名:实验⼀P1⼝输⼊输出实验与P1、P3⼝输⼊输出实验⼀、实验⽬的及任务学习P1、P3⼝的使⽤⽅法,熟练HICE单⽚机试验系统的操作步骤。
⼆、实验总体设计本实验分为两部分:P1⼝和P1、P3⼝输⼊输出实验。
1、P1⼝是⼀个准双向⼝,外接⼋个发光⼆极管,连续运⾏程序,发光⼆极管循环点亮2、P3⼝作为输⼊读取开关状态,P1⼝作为输出⼝,连续运⾏程序,发光⼆级管显⽰开关状态。
3、设计思路如下:(1)、开始——>P1⼝初始化——>点亮⼀位发光⼆极管——>右移⼀位——>循环;(2)、开始——>初始化——>P3⼝开关状态送到P1⼝——>驱动发光⼆极管——>延时三、试验程序框图及实验电路(实验电路及连线详见附录)四、软件设计⼀、P1⼝输⼊输出程序代码:#inc lud e#def ine uc har un sig ned ch ar#def ine ui nt uns ign ed intucha r r rc(uch ar a,n);ucha r r rc(uch ar a,n) //循环右移⼦程序{ucha r b,c;b=a<<(8-n);c=a>>n;a=c|b;retu rn(a);}void ma in(){ucha r i,te mp;uint j;P1=0xff;loop:temp=0x7f;for(i=0;i<8;i++){P1=r rc(tem p,i);for(j=0;j<30000;j++);//延时}}⼆、和P1、P3⼝输⼊输出实验。
#i ncl ude#def ine uc har un sig ned ch ar#def ine ui nt uns ign ed intvoid ma in(){uint j;loop:P1=0XFF;P1=P3;//读取P3⼝状态送P1⼝for(j=0;j<5000;j++);//延时goto lo op;}五、硬件设计1、仿真模式设置:8752模式,仿真存储器模式选择:内程序存储器外数据存储器;2、仿真器P3.6/P3.7短路块设置在WR/RD状态(见仿真器说明书跳线设置)。
单片机程序设计实验报告姓名:学号:专业班级:第二节课:实验一:1357,2468位置的灯交替闪烁一实验要求1357,2468位置的灯交替闪烁。
二硬件连接图与结果三原理简述程序直接控制LED各位置的灯亮灭,时间间隔简单的用了一个延时的语句。
四程序#include<reg51.h>main (){int i;P0=0XAA; //1357四个灯亮for (i=0;i<=25000;i++); //延时程序P0=0X55; //2468四个灯亮for (i=0;i<=25000;i++); //延时程序}五所遇问题与解决方式程序比较简单,没有遇到问题。
实验二:流水灯一实验要求流水灯,一个接一个的灯亮,亮到最后一个后,全部的灯亮,然后重头开始。
二硬件连接图与结果三原理简述程序定义第一个位置的灯亮,通过一个时间间隔,运用一个循环移位程序转移到下一个灯,移位7次后全部的灯亮,最后定义整个循环。
时间间隔简单的用了一个延时的语句。
因为移位时是直接补0,发送低电平不亮,所以直接移位达到要求。
四程序//流水灯#include<reg51.h>main (){int i,j;while(1){P0=0X01; //第1个灯亮for (i=0;i<=30000;i++); //延时程序for(j=0;j<=7;j++) //移位循环程序{P0=P0<<1; //移位for (i=0;i<=30000;i++); //延时程序}P0=0xff; //全亮for (i=0;i<=30000;i++); //延时程序}}五所遇问题与解决方式程序比较简单,没有遇到问题。
实验三:跑马灯一实验要求一个接一个的灯亮,前面亮过的等依旧亮,直到最后一个灯,最后重新开始,循环。
二硬件连接图与结果三原理简述程序定义第一个位置的灯亮,通过一个时间间隔,运用一个循环移位程序转移到下一个灯,移位7次后全部的灯亮,最后定义整个循环。
实验三:中断及定时器实验一、实验目的:1、弄清中断的概念、基本原理,掌握中断技术的应用2、了解中断初始化的方法,中断向量安装和中断服务子程序的设计方法。
3、了解定时/计数器的工作原理及MCS51单片机的定时器内部结构4、掌握时间常数计算方法5、掌握定时器初始化方法和定时中断程序设计方法二、实验内容:定时器实验1、这个是一个电子钟走时程序,利用定时器T0产生50ms中断,中断计数器中断20次为1秒,利用秒信号进行电子钟计时。
先读懂下面程序段,然后编辑、编译程序,并在伟福仿真器上模拟调试该程序。
程序清单如下:COUNT EQU 7FHCOUNT1 EQU 7EHS_MEM EQU 73HM_MEM EQU 72HH_MEM EQU 71HORG 0000HLJMP MAINORG 000BHLJMP INT_T0 ;“*1”MAIN: MOV SP,#2FHMOV TMOD,#BMOV TH0,#03CH ;50毫秒中断时间常数MOV TL0,#0BHMOV IE,#B ;开放T0MOV IP,#0MOV S_MEM,#0MOV M_MEM,#0MOV H_MEM,#0MOV COUNT,#20SETB TR0;______________________________________________________ W AIT:NOPSJMP W AITINT_T0: MOV TL0,#0BHMOV TH0,#3CHDJNZ COUNT,EXT_T0MOV COUNT,#20 ;恢复中断计数器INC S_MEM ;“*2”MOV A,S_MEMCJNE A,60,EXT_T0MOV S_MEM,#0INC M_MEMMOV A,M_MEMCJNE A,#60,EXT_T0MOV M_MEM,#0INC H_MEMMOV A,H_MEMCJNE A,#13,EXT_T0MOV H_MEM,#0EXT_T0: RETI2、按下列要求修改程序或回答问题。
华南师范大学实验报告
学生姓名 学号 专 业 年级、班级 课程名称 单片机实验 实验项目 工业顺序控制实验等 实验类型 实验时间 2013年 05 月29日
实验指导老师 实验评分
一、实验目的
1.掌握工业顺序控制程序的简单编程,中断使用;
2.掌握可编程I/O接口芯片8255的接口原理使用,熟悉对8255初始化编程和输入/输出
软件的设计方法;
3.掌握单片机系统中扩展外围芯片的方法,了解8255芯片的结构及编程方法;
4.进一步了解8255芯片的结构及编程方法,学习模拟交通控制的实现方法;
5.掌握A/D转换与单片机接口的方法,了解其0809转换性能及编程方法,并通过实验了
解单片机如何进行数据采集。
二、实验环境
软件:Microsoft Windows [版本 6.1.7601]下C:\Windows\system32\Keil uVision2.exe 硬件:DICE-5210K单片机试验开发系统
三、实验原理
1.工业顺序控制(见图一、图二)
图一工业顺序控制实验程序框图
图二工业顺序控制实验硬件原理图
2.8255A.B.C口输出方波(见图三、图四)
图三8255A.B.C口输出方波实验程序框图
图四8255A.B.C口输出方波实验硬件原理图3.8255 PA口控制PB口(见图五、图六)
图五8255 PA口控制PB口实验程序框图
图六 8255 PA口控制PB口实验硬件原理图4.8255控制交通灯(见图七、图八)
图七8255控制交通灯实验程序框图
图八8255控制交通灯实验硬件原理图
5.A/D 0809转换实验(见图九、图十)
图九A/D 0809转换实验程序框图
图十A/D 0809转换实验硬件原理图
四、实验内容及实验结果
1.工业顺序控制
1)实验内容
i.将音频功放区的JP插针用短路块把+5V 和0N短接,用双头线将P3.4口接开
关K1,P3.3口接开关K2,P1.0~P1.7接至发光二极管L1~L7,P1.7口接至音
频功放区VIN;
ii.按图接好连线后,置开关K1、K2的初始状态分别为低电平、高电平;
iii.执行程序HW04.ASM,置开关K1为高电平,启动开工,观察发光二极管点亮情况,确定工序执行是否正常;
iv.置开关K2为低电平,看是否有声音报警;
v.恢复中断(K2置为高电平)报警停,程序将从刚才报警的工序继续执行下去,使用单步、单步跟踪,非全速断点、全速断点,连续执行功能调试
软件,观察实验现象。
2)实验结果
i.运行程序后,K1低电平,K2高电平,除L8亮以外,LED灯L1~L7全灭;
ii.置K1为高电平,从L1灯开始亮,L1~L6流水灯式亮灯,如此循环;
iii.置K1为低电平,电路现象没有改变;
iv.置K2为低电平,除L8亮以外,LED灯L1~L7全灭,无报警(设备问题?
电路不稳定),接着置K2为高电平,LED灯正常工作。
2.8255A.B.C口输出方波
1)实验内容
i.执行程序HW05.ASM,观察实验现象;
ii.通过实验板观察8255A.B.C口的电平变化(使用双头线将8255A.B.C口分别连至发光二极管Ll~L8,观察发光二极管变化情况)。
2)实验结果
可能为设备问题,8255A.B.C口一直处于低电平,灯不亮。
3.8255 PA口控制PB口
1)实验内容
i.用8芯线将8255 PA口接至开关Kl~K8,PB口接至发光二极管L1~L8;
ii.运行程序HW06.ASM,拨动开关K1~K8,观察L1~L8发光二极管是否对应点亮。
2)实验结果
i.依次将开关K1~K8从低电平拨为高电平,灯L1~L8依次点亮;
ii.依次将开关K1~K8从高电平拨为低电平,灯L1~L8依次熄灭。
4.8255控制交通灯
1)实验内容
i.用双头线将8255 PA0~PA2口接至发光二极管L3~L1,PA3~PA5口接至发
光二极管L7~L5;
ii. 执行程序HW07.ASM,观察实验现象。
2)实验结果
i.初始态为四个路口的红灯全亮;东西路口的绿灯亮,南北路口的红灯亮,
东西路口方向通车;延时一段时间后东西路口的绿灯熄灭,黄灯开始闪烁;
闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方
向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪烁,闪
烁若干次后,再切换到东西路口方向;
ii.重复以上过程。
5.A/D 0809转换实验
1)实验内容
i.用双头线将可调电压区的VOUT接至ADC0809模数转换区的IN0,可调电压区
的VIN接至电源+5V,ADC0809模数转换区的CS4接至系统接口区的8000H端
口,ADC0809模数转换区的WR接至系统接口区的/IOWR端口,ADC0809模数
转换去的RD接至系统接口区的/IORD,ADC0809模数转换区的ADDA、ADDB、
ADDC接至GND,CLK接至单脉冲与时钟区的500K,用8芯线将数据总线JX0接
至ADC0809模数转换区的JX6;
ii.运行程序HW09.ASM,数码管上显示0809.XX,后二位显示当前采集的电压转换的数字量,调节可调电压,该二位将随着电压变化而相应变化,变化
范围为00至FF。
2)实验结果
数码管上显示0809.59,调节可调电压,该两位数字随电压的升高变大,再随
电压的降低变小,变化内容为XX:59->FE->00->FE。
3)思考题
修改程序,用其它通道轮流采样显示(程序段见图十一),通过修改X的值,
依次改为08,00,09,10,10,实现0809的其他通道采样。
图十一其他通道轮流采样显示
五、实验总结
这是单片机的第三次实验,继硬件实验一熟悉实验环境之后的第二次上机动手操作。
实验中实验仪器不稳定,多发生故障,后来在其他同学的实验箱上完成实验。
这次实验,虽然进行的不是那么顺利,但是在实验中进一步熟悉了代码含义,初步了解硬件设计。