单片机第三次实验
单片机中断实验报告
实验三定时器中断实验一、实验目的1、掌握51单片机定时器基本知识;2、掌握定时器的基本编程方法;3、学会使用定时器中断。
二、实验内容1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。
三、实验设备PC 机一台、单片机实验箱主要器件:AT89C52、7SEG-BCD、四、实验步骤1、使用Proteus设计仿真原理图;2、使用Keil设计程序;3、联合调试仿真。
五、实验流程图六、实验程序与结果#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit F=P2^1;void timer1_init(){TMOD=0x10;//将定时器1设置为工作方式1TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500//(1/500)s/(1/3000000)s=6000TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1;ET1=1;TR1=1;}void main(){timer1_init();while(1);}void timer1() interrupt 3{TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256;F=~F;//每次进入中断P1.1口取反}#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit F=P2^1;void timer0_init(){TMOD=0x01;//将定时器0设置为工作方式1TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us//500us/6us=83.3333TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83EA=1;ET0=1;TR0=1;}void main(){timer0_init();while(1);}void timer0() interrupt 1{TH0=(65536-83)/256;//每次进入中断,重装初值TL0=(65536-83)%256;F=~F;//每次进入中断P1.1口取反,表示定时时间到}#include<reg51.h> // 包含51单片机寄存器定义的头文件#define seg_data P1#define seg_data2 P3#define uint unsigned intsbit D1=P2^0; //将D1位定义为P2.0引脚uint counter=0;unsigned int unit=0,decade=0,avs=0;//time=0;/************************************************************** 函数功能:主函数**************************************************************/ void main(void){uint time,time1,temp1,temp2,temp3;seg_data=0;seg_data2=0;TMOD=0x11; //使用定时器T0的模式2TH0=0xFC; //定时器T0的高8位赋初值 1000-500TL0=0x18; //定时器T0的低8位赋初值TH1=(65536-50000)/256; //定时器T1的高8位赋初值TL1=(65536-50000)%256; //定时器T1的低8位赋初值EA=1; //开总中断ET0=1; //定时器T0中断允许ET1=1;TR0=1; //启动定时器T0TR1=1;while(1)//无限循环等待中断{temp1=(decade&0x0F)<<4;temp2=unit&0x0F;time=temp2|temp1;seg_data=time;temp3=avs&0x0F;time1=temp3;seg_data2=time1;}}{D1=~D1; //按位取反操作,将P2.0引脚输出电平取反TH0=0xFF; //定时器T0的高8位赋初值 1000-500TL0=0x06; //定时器T0的低8位赋初值}void Time1(void) interrupt 3{counter++;if(counter>19){unit++;counter=0;}if(unit>9){decade++;unit=0;}if(decade>5){avs++;decade=0;}if(avs>9){avs=0;}TH1=(65536-50000)/256; //定时器T1的高8位赋初值TL1=(65536-50000)%256; //定时器T1的低8位赋初值TF1=0;}七、实验心得通过本次课程设计使我感受到它是一门综合性、实践性较强的课程,使我体会到要想综合运用所学的理论知识,提高我的设计能力,必须增加实际操作的环节。
0物理学1班单片机实验3验收时间安排表
黎钲潮 吴燕鹃 陈瑞 杨桂旭 阮艺冰 翁楚燕 黄锦波 黄子眉 陈汝冬 杨洁琳 黄泽楠 陈泽斌 徐雨洋 谢春勇 何秋霖 朱小熹 李锦权 吴纯 林锦芬 梁浩贤 梁锦波 卢俏敏 丘梦慧 林通玉 林丽玲 陈焕娜 吴盼盼 郭昊 黄少端 郑黄烨 马晓华 李锦柔 梁韵琦 肖凯龙 丘海婷 莫细敏 张心蔚 吴诗颖 沈美钰 谢颖欣 杨晓碧 黄富丽 曾玉妍 陈捷琳 黄煜 李维广 陈颖芝 李美莹 徐清慧
98 20122301149 99 20122301151 100 20122301154 101 20122301155 102 20122301158 103 20122301159 104 20122301160 105 20122301165 106 20122301166 107 20122301167 108 20122301168 109 20122301169 110 20122301170 111 20122301173 112 20122301174 113 20122301175 114 20122301181 115 20122301182 116 20122301184 117 2012230芮敏雯 吴丹穗 黄宇波 谢佳云 岑振豪 连兴业 刘燚圣 朱凯欣 王骏昂 叶家兴 邓灏楠 陈越 陈艺炜 颜秋林 杨钊华 王嘉辉 黄奔豪 张笑鸣 王剑平 江捷 刘卓俊 何铸 周仁武 刘莹 吴蓁蓁 汤幸统 梁智诚 谭博爔 古金良 林琳 梁佩雯 钟晓 张琪 陈婷婷 卢顺兴 张文亮 李广锡 麦土强 梁添华 张凯侨 陈馥 张思凡 温棋彬 丘晓蕾 杨岸林 物理学 物理学 物理学 物理学 物理学 物理学 物理学
专业
第三次实验验收时间
2
3
4
5
6
7
1 20120003004 2 20120003005 3 20120003010 4 20120003012 5 20120003015 6 20120003019 7 20120003027 8 20120009001 9 20120009003 10 20120009004 11 20120009005 12 20120009006 13 20120009007 14 20120009008 15 20120009010 16 20120009011 17 20120009013 18 20120009014 19 20120009016 20 20120009017 21 20120009019 22 20120009023 23 20120009026 24 20120009027 25 20122101015 26 20122301005 27 20122301006 28 20122301007 29 20122301008 30 20122301014 31 20122301015 32 20122301016 33 20122301021 34 20122301022 35 20122301023 36 20122301024 37 20122301026 38 20122301029 39 20122301031 40 20122301032 41 20122301037 42 20122301038 43 20122301039 44 20122301040 45 20122301041 46 20122301045 47 20122301046 48 20122301047
东大单片机实验报告三
东南大学生物科学与医学工程学院单片机系统设计与应用实验报告第三次实验实验名称:数据传送实验专业:生物医学工程姓名:学号:同组人员:学号:实验室: 医用电子技术实验中心(综合楼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地址,正数地址以及负数地址,程序如下。
单片机实验3 数码管控制实验-动态显示
;实验名称:数码管动态显示
;功能:4位数码管循环显示“0123”“4567”“89AB”“CDEF”,间隔0.5S。
;编写人:陈建泽
;编写时间:2010年11月2日
/**********************程序代码************************/
D1MS: MOV R2,#250 ;250*(1+1+2)=1000us=1ms
L1:NOP
NOP
DJNZ R2,L1
RET
/*****************中断服务子程序*****************/
T0_INT:MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
MOV A,R4
CJNE A,#16,L3
AJMP MAIN
L3:MOV R5,A
AJMP L1
DIS:MOV P2,R6;用A作为中间寄存器,因后面要循环显示
MOV A,R5
ACALL SQR ;查表
MOV P0,A
ACALL D1MS ;1ms
INC R5
MOV A,R6
RL A;指向下一位
MOV R6,A
RET;子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H ;共阳极字型码表0、1、2、3
DB 99H, 92H, 82H, 0F8H;共阳极字型码表4、5、6、7
DB 80H, 90H, 88H, 83H;共阳极字型码表8、9、A、B
DB 0C6H,0A1H,86H, 8EH;共阳极字型码表C、D、E、F
单片机实验
单片机实验第二次实验:图见实验题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的方波。
【VIP专享】单片机流水灯实验报告东华理工
学院:机械与电子工程学院单片机第三次实验报告专业:自动化班级: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。
单片机C语言_-_实验报告三
教师签名
王银花
批改时间
2014年月日
检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的按键处理。编写单片机的键盘检测程序时,一般在检测按下时加入去抖延时,检测松手时就不用加了。
三、实验内容和步骤
通过四个按键来控制LED灯的显示情况:
A:S1:D0点亮
S2:D1点亮
S3:D2点亮
S4:D3点亮
B:S1:D0-D3点亮
S2:D2点亮
S3:D0-D7点亮
S4:D0-D5点亮
注:任意完成一组即可
四、电路图+程序
五、问题与心得
六、对本实验过程及方法、手段的改进建议
七、实验评价(教师)
1.实验步骤正确,完成了本实验的全部内容。很好( ) 一般( ) 否( )
2.实验数据全面,调试步骤准确,结果正确。很好( ) 一般( ) 否( )
3.实验报告格式规范,图表清晰。很好( ) 一般( ) 否( )
学生实验报告三
系别
课程名称
单片机语言C51程序设计
专业
实验名称
班级
小组情况
姓名
实验时间
2014年月日
学号
指导教师
王银花
报告内容
一、实验目的和任务
1.进一步熟悉编程和程序调试
2.学习独立按键的使用方法
I/O线构成单个按键电路,各个按键之间相互独立,一根线上的按键状态不会影响其他输入线上的工作状态,又称独立式键盘接口电路。
单片机原理实验报告
实验一:系统认识实验一、设计目的: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 命令按钮即可将源程序文件添加到工程中。
c51单片机实验报告
c51单片机实验报告
《C51单片机实验报告》
C51单片机是一种广泛应用于嵌入式系统中的微控制器,具有高性能、低功耗和丰富的外设接口,因此在各种电子设备中得到了广泛的应用。
本次实验将以C51单片机为研究对象,通过实验验证其性能和功能。
实验一:LED灯控制实验
首先,我们将C51单片机与LED灯连接起来,通过程序控制LED灯的亮灭。
实验结果表明,C51单片机可以准确地控制LED灯的亮度和闪烁频率,具有良好的稳定性和可靠性。
实验二:蜂鸣器控制实验
接着,我们将C51单片机与蜂鸣器连接起来,通过程序控制蜂鸣器的发声。
实验结果显示,C51单片机可以精准地控制蜂鸣器的音调和音量,具有较高的音频输出质量。
实验三:温湿度传感器实验
最后,我们将C51单片机与温湿度传感器连接起来,通过程序读取并显示温湿度数值。
实验结果表明,C51单片机可以准确地读取传感器的数据,并通过显示屏输出,具有良好的数据处理能力。
通过以上实验,我们验证了C51单片机在LED灯控制、蜂鸣器控制和温湿度传感器应用方面的性能和功能。
C51单片机具有较高的稳定性、可靠性和可编程性,适用于各种嵌入式系统的设计与开发。
希望本次实验报告能够对C51单片机的应用和研究提供一定的参考价值。
单片机原理及嵌入式系统设计第三次作业习题
单片机原理及嵌入式系统设计第三次作业习题1、对程序存储器的读操作只能使用(D)A)MOV指令B)PUSH指令C)MOVX指令D)MOVC指令2、MCS51执行完MOVA,#08H后,PSW的哪一位被置位(D)A)CB)F0C)OVD)P3、MCS-51系统中,若用传送指令访问片内RAM,它的操作码助记符是MOV;若用传送指令访问片外RAM,它的操作码助记符是MOV某4.MOVPSW,#18H是将MCS-51的工作寄存器组置为第4组。
用简单的指令序列完成以下功能:6、将内RAM30H单元的内容传送到外RAM3000H单元中。
MOVDPTR,#3000HMOVA,30H7、将ROM0100H单元的内容传送到内RAM40H单元中。
MOVA,#00HMOVDPTR,#0100HMOV40H,A8、将外RAM0070H单元的内容传送到R5中。
MOVDPTR,#0070H9、用2种方法实现内RAM60H和61H单元内容的互换。
MOVA,60HMOV60H,61HMOV61H,A10、设SP=60H,片内RAM的(30H)=24H,(31H)=10H,请填出注释中的结果。
PUSH30H;SP=,(SP)=.PUSH31H;SP=,(SP)=.POPDPL;SP=,DPL=.POPDPH;SP=,DPH=.MOVA,#00H最后的执行结果是PUSH30H;SP=61H,(SP)=24H.PUSH31H;SP=62H,(SP)=10H.POPDPL;SP=62H,DPL=10H.POPDPH;SP=61H,DPH=24H.MOVA,#00H最后的执行结果是(2140H)=00H11、设片内RAM中(59H)=50H,执行下列程序段MOVR0,AMOVA,#0MOVA,#25HMOV51H,AMOV52H,#70H问A=25H(50H)=00H(51H)=25H(52H)=70H12、R0=4BH,A=84H,片内RAM(4BH)=7FH,(40)=20HMOV40H,AMOVR0,#35H问执行程序后R0、A和4BH、40H单元内容的变化如何?R0=35HA=7FH(4BH)=20H(40H)=7FH13、欲将片外RAM中3057H单元的内容传送给A,判断下列指令或程序段的正误。
河北工业大学 单片机 第三次实验内容
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溢出标志位。
单片机实验三(急救车与交通灯)
单片机技术与应用实验报告实验名称:外部中断实验(急救车与交通灯)班级:11062811学号:11061118姓名:吕琳涛指导老师:谷雨2013年5月20日1. 实验要求由以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理,并允许急救车优先通过的要求。
有急救车到达时,两向交通信号为全红,以便让急救车通过。
假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。
本实验以按键为中断申请,表示有急救车通过。
2. 实验目的1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
3. 程序说明:在本次实验中,我们可以确定外部中断的作用是用于有救护车行驶过来时对程序的进行的简单的控制。
对于正常的红绿灯的亮灭我们可以参考第一个实验中流水灯的设计理念。
综上所述我们这一次的实验就是流水灯与外部中断的结合。
通过对七种情况的罗列1 0 0 1 0 1 1 0 南北绿,东西红0 1 1 0 1 0 0 1 南北红,东西绿1 0 0 1 1 1 1 1 只亮东西红0 1 1 0 1 1 1 1 只亮南北红0 0 0 0 0 1 1 0 南北黄,东西红0 0 0 0 1 0 0 1 南北红,东西黄0 0 0 0 1 1 1 1 全红我们可以利用XBYTE[0xf200]这个函数对这几种情况进行读取与显示,在不同情况进行显示的过程中我们用以前的delay函数进行时间上的规划从而达到依次显示的效果。
0x0f 全红XBYTE[0xf200]=0x0f;0x96 南北绿,东西红XBYTE[0xf200]=0x96;0x9f 只亮东西红XBYTE[0xf200]=0x9f;0x06 南北黄,东西红XBYTE[0xf200]=0x06;0x69 南北红,东西绿XBYTE[0xf200]=0x69;0x6f 只亮南北红XBYTE[0xf200]=0x6f;0x09 南北红,东西黄XBYTE[0xf200]=0x09;在具体的实验代码编写过程中,我们会用到EA=1;EX0=1;IT0=1;用于设定外部中断0为跳变沿触发方式,默认为电平触发方式。
单片机第三次实验报告
《单片机课程第三次实验报告》
实验课程:单片机原理及应用—基于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状态(见仿真器说明书跳线设置)。
单片机 实验三中断及定时器实验
实验三:中断及定时器实验一、实验目的: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、按下列要求修改程序或回答问题。
华北水利水电-单片机实验报告(答案)
单片机实验报告指导老师:***学院:机械学院专业:机械设计制造及其自动化专业学号:姓名:实验一汇编语言源程序编辑一、实验目的:了解软件μ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 即可。
单片机实验指导书-MUT-III实验指导书
MUT-III实验指导书中北大学信息与通信工程学院电气工程系基础实验部分实验1 P1口实验一、实验目的:1.学习P1口的使用方法。
2.学习延时子程序的编写和使用。
二、实验设备:CPU挂箱、8051CPU模块三、实验内容:1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
四、实验原理:P1口为准双向口,P1口的每一位都能独立地定义为输入位或输出位。
作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。
软件延时,如果用c编程时,通过使用keil的软件模拟,调试观察子函数(delay)延时时间。
(具体延时可以自行设定)使用汇编语言的软件延时,可以计算其指令的周期数,大概估算其软件延时。
五、实验原理图:P1口输出实验P1口输入实验六、实验步骤:执行程序:P1.0~P1.7接发光二极管L1~L8。
七、程序框图:中北大学信息与通信工程学院电气工程系循环点亮发光二极管(具体延时可以自行设定)实验2 中断口实验一、实验目的:1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
二、实验设备:CPU挂箱、8051CPU模块三、实验内容:通过设定两个中断使能和触发方式,并编写相应的中断服务子函数,改变led灯的变化情况。
当按下KEYBOARD的按键时8个led都灭,当把k1向上拉再复位后,4个led亮,4个灭。
四、实验原理:参考《单片机原理及接口技术》第三版,北京航空航天大学出版社。
五、实验步骤:P1.0~P1.7接发光二极管L1~L8。
将单片机上的INT0和KEYBOARD的P-相连接。
将单片机上的INT1和k1相连接,默认初始化时k1向下拉(远离led的一端)。
六、实验说明:在编写相应的中断程序中,中断名字必须为IN0,IN1否则要对应的中断服务程序入口写,例如中断0的中断服务程序入口为0200h。
中北大学信息与通信工程学院电气工程系实验3 8279显示接口实验一、实验目的:1.掌握在8051系统中扩展8279键盘显示接口的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验报告(三)学院:计算机学院学号:120613106姓名:蒋晓阳定时器/计数器实验一.实验指标1.理解单片机内部定时器的工作原理及使用方法。
2.了解单片机定时中断程序的编写和调试方法。
3.掌握定时器的基本使用方法。
4.掌握单片机定时和中断的编程方法。
二.实验总体设计方案利用单片机定时器 T2 进行倒计时,并在双位数码管上显示倒计时间。
同时用定时器T0方式实验。
硬件部分:对应接口连接两位数码管,注意连接的高低位,从而实现倒时。
软件部分:是对T2口进行操作、初始化、现场保护和恢复。
设计框架图三. 硬件设计连线:串并转换模块的 DIN 接单片机的 P3.0, CLK 接 P3.1。
74LS164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。
数据通过两个输入端(DSA 或 DSB )之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。
两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。
仿真模式设置: 8752 模式;仿真存储器模式选择内程序存储器外数据存储器。
仿真器 P3.6/P3.7 短路块设置在 WR/RD 状态(见仿真器说明书跳线设置)。
电路原理图电路仿真图四.软件设计流程图源程序:#include <reg52.h>#define uchar unsigned char#define uint unsigned intuchardis_code[11]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0xff };uchar ssbuf, buff;uchar disp(ssbuf);void send(uchar a);void time();/* 显示子程序*/uchar disp(ssbuf){uchar aa;aa=ssbuf&0x0F;send(aa);aa=ssbuf>>4;send(aa);return aa;}void send(uchar aa){uchar i=aa;SBUF=dis_code[i];while(TI==0);TI=0;}/* 定时器中断子程序*/void time() interrupt 5 using 0{uchar ssbuf1;EA=0;TF2=0; //关定时器buff=buff-1; // %1 秒BUFF 缓冲区的内容-1 if(buff==0){buff=0x64;ssbuf=ssbuf-1; //秒SSBUFF 缓冲区的内容-1ssbuf1=ssbuf&0x0f;if(ssbuf1==0x0f){ssbuf=ssbuf-6; }ssbuf1=ssbuf&0xf0;if(ssbuf1==0xf0){ssbuf=ssbuf-0x60;}if(ssbuf==0x99){ssbuf=0x59;}}EA=1;}void main(){uint i;RCAP2H=0xd8; //定时常数RCAP2L=0xf0;TH2=0xd8;TL2=0xf0;IE=0xa0; //允许中断T2CON=0x08;ssbuf=0x00; //显示初值buff=100;loop1:disp(ssbuf);TR2=1; //开定时器for(i=0;i<5000;i++); //延时goto loop1;}T1方式实现:#include <REGX52.H>#define TH_1 (65536-50000)/256#define TL_1 (65536-50000)%256unsigned char str[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳极数码管对应值表unsigned char count=0;//中断计时次数char time=59;//计时的变化初值sbit KEY=P3^7;//开关的控制键sbit FirstNixietube=P3^0;//第一个数码管选择位sbit SecondNixietube=P3^1;//第二个数码管选择位void Delay_Time(unsigned char sign) {unsigned char i,j,k;for(i=0;i<sign;i++)for(j=0;j<4;j++)for(k=0;k<250;k++);}void Init_T1()//初始化T0{TMOD=0x10;//T0选择方式1TH1=TH_1;TL1=TL_1;//赋进计数初值EA=1;//开总中断TR1=0;//关T0计时ET1=1;//开T0中端}void Interrupt_T1() interrupt 3 using 0 {TR1=0;//关TR0计时EA=0;//关总中断count++;//中断计次if(count>20){time--;if(time<0) time=59;count=0;}TR1=1;EA=1;}void Display_Time()//显示计时倒计次{unsigned char high,low;//十位和个位暂存的变量high=time/10;//得到十位low=time%10;//得到个位Delay_Time(10);//毫秒级延时10msP2=str[high];//显示十位FirstNixietube=1;SecondNixietube=0;//第一个数码管选择位Delay_Time(10);//毫秒级延时P2=str[low];//显示个位FirstNixietube=0;SecondNixietube=1;//第二个数码管选择位}void main(){unsigned char i;i=1;KEY=1;//开关初始化为高电平Init_T1();//初始化T0while(1){if(KEY==0){TR1=1;//开T0计时Display_Time();//显示倒计时函数}else{TR1=0;//关T0计时Display_Time();//显示倒计时函数}}}T0方式实现:#include <REGX52.H>#define TH_0 (65536-50000)/256#define TL_0 (65536-50000)%256unsigned char str[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳极数码管对应值表unsigned char count=0;//中断计时次数char time=59;//计时的变化初值sbit KEY=P3^7;//开关的控制键sbit FirstNixietube=P3^0;//第一个数码管选择位sbit SecondNixietube=P3^1;//第二个数码管选择位void Delay_Time(unsigned char sign){unsigned char i,j,k;for(i=0;i<sign;i++)for(j=0;j<4;j++)for(k=0;k<250;k++);}void Init_T0()//初始化T0{TMOD=0x01;//T0选择方式1TH0=TH_0;TL0=TL_0;//赋进计数初值EA=1;//开总中断TR0=0;//关T0计时ET0=1;//开T0中端}void Interrupt_T0() interrupt 1 using 0 {TR0=0;//关TR0计时EA=0;//关总中断count++;//中断计次if(count>20){time--;if(time<0) time=59;count=0;}TR0=1;EA=1;}void Display_Time()//显示计时倒计次{unsigned char high,low;//十位和个位暂存的变量high=time/10;//得到十位low=time%10;//得到个位Delay_Time(10);//毫秒级延时10msP2=str[high];//显示十位FirstNixietube=1;SecondNixietube=0;//第一个数码管选择位Delay_Time(10);//毫秒级延时P2=str[low];//显示个位FirstNixietube=0;SecondNixietube=1;//第二个数码管选择位}void main(){unsigned char i;i=1;KEY=1;//开关初始化为高电平Init_T0();//初始化T0while(1){if(KEY==0){TR0=1;//开T0计时Display_Time();//显示倒计时函数}else{TR0=0;//关T0计时Display_Time();//显示倒计时函数}}}五.实验总结在这次定时器计数器试验中,我们用到了LED数码管来显示数字,同时在老师的指点下,对T0和T1方式进行了实现,电路设计的过程,不仅让我动了手动了脑,更让我体会到了理论和实践相结合的重要性。
六.参考书目《单片机应用技术教程》《仿真技术》。