单片机报告——哈工大

合集下载

哈工大51单片机存储器扩展

哈工大51单片机存储器扩展

并行接口特点
串行接口特点
串行接口具有数据传输速度较慢、数 据总线宽度较小等缺点,但电路连接 简单、占用引脚少。
并行接口具有数据传输速度快、数据 总线宽度大等优点,但电路连接复杂。
51单片机存储器的访问方式
01
02
03
直接寻址方式
直接寻址方式是指直接给 出存储单元的地址,通过 该地址访问存储器中的数 据。
通过哈工大51单片机的外部存 储器接口,将存储器芯片与单 片机连接。
根据存储器芯片的规格书,设 计相应的电路和连接方式。
根据实际需求,编写相应的程 序来读写扩展的存储器。
05 扩展存储器的应用与优化
扩展存储器在系统中的应用
数据存储
01
扩展存储器用于存储大量数据,如传感器采集的数据、用户数
据等。
程序存储
02
扩展存储器用于存储应用程序的代码,以支持更复杂的功能和
更大的程序。
缓存
03
扩展存储器可以作为高速缓存,提高系统的整体性能。
扩展存储器的性能优化
读写速度
通过优化硬件设计和软件算法,提高扩展存储器的读写速度。
可靠性
采用错误检测和纠正技术,提高扩展存储器的可靠性。
兼容性
确保扩展存储器与主控制器和其他组件的兼容性,以实现无缝集 成。
间接地址映射
扩展存储器的地址通过特 定的寄存器映射到单片机 的地址空间,可以实现更 灵活的地址管理。
段地址映射
将扩展存储器分成若干段, 每段独立映射到单片机的 地址空间,可以实现较大 的存储空间扩展。
04 哈工大51单片机存储器扩 展方案
扩展方案的比较与选择
方案一:并行扩展 优点:扩展速度快,适用于对速度要求较高的应用。

哈理工单片机温度系统设计报告

哈理工单片机温度系统设计报告

《单片机原理及接口技术》课程设计报告设计题目基于单片机的温度数据采集系统设计班级姓名学号指导教师目录一、绪论 (1)二、总体方案设计 (1)三、硬件系统设计 (3)3.1单片机及电源模块设计 (3)3.2、电源管理模块电路图 (4)3.3、数据采集模块设计 (5)3.3.1、传感器 (5)3.3.2、多路开关 (5)3.3.3、放大器 (7)3.3.4、A/D转换器 (7)3.3.5、硬件器件选择 (8)3.4、信号处理模块设计 (9)3.5、数据运算模块设计 (10).3.6、显示模块设计图 (10)3.6、电路总体设计图 (13)四、系统软件设计 (16)4.1、系统程序设计 (17)五、设计总结 (23)参考文献 (23)一.绪论在生产和日常生活中,温度的测量及控制十分重要,实时温度检测系统在各个方面应用十分广泛。

温度的控制及测量对保证产品质量、提高生产效率、节约能源、生产安全、促进国民经济的发展起到重要作用。

传统的方法是用温度计等测试器材,通过人工进行检测,对不符合温度要求的库房进行通风和降温等工作。

传统的温度采集不仅耗时而且精度低,效率低,且测试的温度误差大,随机性大。

远不能满足各行业对温度数据高精度,高可靠性的要求。

这种人工测试方法费时费力、最近,随着计算机在社会生活中的不断应用,单片机应用正不断深入各个方面,其中就带动了传统控制检测系统的更新。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,采用微机进行温度检测,数字显示,信息存储及实时控制,对于提高生产效率和产品质量、节约能源等都有重要作用。

单片机温度测量则是对温度进行有效的测量,并且能够在工业生产中得到了广泛的应用,尤其在电力工程、化工生产、机械制造、冶金工业等重要工业领域中,担负着重要的测量任务。

在日常生活中,也可广泛实用于地热、空调器、电加热器等各种家庭室温测量及工业设备温度测量场合。

本此题目的总体功能就是利用单片机和热敏原件实现温度的采集与读数,利用五位LED显示温度读数和所选通道号,实现热电转化,实现温度的精确测量。

哈理工单片机实验2:ADC0809编程

哈理工单片机实验2:ADC0809编程

哈尔滨理工大学实验报告实验名称:ADC0809编程班级:学号:姓名:一、实验目的:1.熟悉ADC0809芯片的读写操作,学会将模拟电压量通过芯片转换为数字量;2.熟悉DS18B20温度芯片的操作,学会芯片转换到的温度数字量通过MCU控制显示到数码管上。

二、实验内容:1.ADC0809:通过MCU控制AD,将一路模拟量转换为数字量,并且将读到的数字量显示到数码管。

2.DS18B20:通过MCU控制温度芯片,将读到的温度数字量通过7279显示到数码管。

三、实验用设备仪器及材料:1.单片机实验盒。

2. Keil软件3.计算机。

四、实验方法及步骤:1. 打开Keil uVision4软件建一个工程,工程名为:ADC0809;2.建好工程后再点击菜单中的File选择new…新建一个AD.C文件并保存,并添加到工程中;3.通过查取芯片资料,编写C程序,通过编译后,生成16进制文件;4.将程序烧写到实验板上,完成调试;5.对于温度芯片,同以上步骤,烧写到实验板上,完成调试。

五、实验结果分析:ADC0908源程序:#include<stc15f2k60s2.h>#include <math.h>void long_delay(void);//长时延void short_delay(void);//短延时void write7279(unsigned char,unsigned char);//写入到7279void send_byte(unsigned char);//发送一个字节unsigned char digital;typedef unsigned char BYTE;typedef unsigned int WORD;sbit key=P4^3;//按键有效输出端,平时为高电平,sbit dat=P4^5;//串行数据输入/输出端,当芯片接收指令时,sbit clk=P4^6;//同步时钟输入端,向芯片发送数据及读取键盘数据时,sbit cs=P4^7; //片选输入端,此引脚为低电平时,可向芯片发送指令及读sbit kg1=P2^7;sbit kg2=P4^2;#define ADC_POWER 0x80 //ADC电源控制位#define ADC_FLAG 0x10 //ADC完成标志#define ADC_START 0x08 //ADC起始控制位#define ADC_SPEEDLL 0x00 //540个时钟#define ADC_SPEEDL 0x20 //360个时钟#define ADC_SPEEDH 0x40 //180个时钟#define ADC_SPEEDHH 0x60//90个时钟void InitUart();void SendData(BYTE dat);void Delay(WORD n);void InitADC();BYTE ch = 7; //ADC通道号unsigned int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,y,x,w;void main(){InitADC();kg1=0;kg2=0;P0=0xff;//初始化ADCIE = 0xa0; //开始AD转换 while (1);}/*ADC中断服务程序*/void adc_isr() interrupt 5 using 1{ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志 P0=ADC_RES;a=0x01;b=ADC_RES;k=a&b;c=b>>1;d=a&c;e=b>>2;f=a&e;g=b>>3;h=a&g;i=b>>4;j=a&i;l=b>>5;m=a&l;n=b>>6;o=a&n;p=b>>7;q=a&p;s=q*128+o*64+m*32+j*16+h*8+f*4+d*2+k*1;y=s*5;w=y/256;x=(y*10)/256;w=floor(w);x=x%10;write7279(0x81,w+0x80);write7279(0x80,x);ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;}/*初始化ADC*/void InitADC(){P1ASF = 0xff; //设置P1口为AD口ADC_RES = 0;ADC_RESL = 0; //清除结果寄存器ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch; Delay(2); //ADC上电并延时}/*软件延时*/void Delay(WORD n){WORD x;while (n--){x = 5000;while (x--);}}//7279写函数void write7279(unsigned char cmd,unsigned char dta){send_byte(cmd);send_byte(dta);}void send_byte(unsigned char out_byte){unsigned char i;cs=0;long_delay();for(i=0;i<8;i++){if(out_byte&0x80){dat=1;}else{dat=0;}clk=1;short_delay();clk=0;short_delay();out_byte=out_byte*2;}dat=0;}void long_delay(void){unsigned char i;for(i=0;i<0x30;i++);}void short_delay(void){unsigned char i;for(i=0;i<8;i++);}DS18B20源程序:#include<STC15F2K60S2.h>/*------DS18B20 PORT-----*/ sbit DB_B20=P5^5;//P4^4;/*------HD7279 PORT-------*/sbit cs = P4^7;sbit clk = P4^6;sbit key = P4^3;sbit dat = P4^5;/*--- HD7279 FUNCTION-----*/unsigned char bdata dat_out1;unsigned char bdata dat_out2;sbit t1 = dat_out1^7;sbit t2 = dat_out2^7;void HD7279_init(void); //hd7279初始化void HD7279_send_one(unsigned char cmd); //发送单字节指令void HD7279_send_two(unsigned char cmd,unsigned char dat2);//发送双字节指令,cmd为指令,dat2为数据void send(unsigned char cmd);void display_tem(void);/*-----COMMON FUNCTION----*/void delay_l(unsigned int time);//长延时void delay_s(unsigned int time);//短延时/*--- DS18B20 FUNCTION-----*/unsigned char tem_pnt;unsigned char tem_num;bit tem_sign;void reset_B20(void);unsigned char read_b20_byte(void);void write_b20_byte(unsigned char);void convert_cmd_b20(void);void read_cmd_b20(void);void tem_receive_b20(void);void set_11bit(void);void b20_init(void);/*--- TIME FUNCTION-----*/unsigned char times;void times_init(void);/*-----------------------*/void main(void){b20_init();times_init();HD7279_init();while(1){delay_l(10);}}/*-----COMMON FUNCTION----*/void delay_s(unsigned int us) {while(us--);}void delay_l(unsigned int time) {unsigned char temp=200;while(time--){while(temp--);temp=200;}}/*--- DS18B20 FUNCTION-----*/ void b20_init(void){//P4SW = 0XFF;P5M1=0X00;P5M0=0X00;set_11bit();}void reset_B20(void){DB_B20=1;DB_B20=0;delay_s(300);//>480us 29 80DB_B20=1;delay_s(3);//15---60us 3while(DB_B20);delay_s(300);//480us 25 70DB_B20=1;}void write_b20_byte(unsigned char cmd) {unsigned char i;for(i=0;i<8;i++){DB_B20=0;delay_s(3);// 0DB_B20=cmd&0x01;delay_s(20); //8DB_B20=1;delay_s(3);cmd>>=1;}delay_s(6); //5}unsigned char read_b20_byte(void){unsigned char rbyte=0;unsigned char i;for(i=0;i<8;i++){rbyte>>=1;DB_B20=0;delay_s(3); //0DB_B20=1;delay_s(3); //0if(DB_B20)rbyte |= 0x80;delay_s(20); //6}return rbyte;}void set_11bit(void){reset_B20();write_b20_byte(0xcc);write_b20_byte(0x4e);write_b20_byte(90);write_b20_byte(10);write_b20_byte(0x5f);//12bit---7f 10bit----3f }void convert_cmd_b20(void){reset_B20();write_b20_byte(0xcc);write_b20_byte(0x44);}void read_cmd_b20(void){reset_B20();write_b20_byte(0xcc);write_b20_byte(0xbe);}void tem_receive_b20(void){unsigned char a;unsigned char b;int point;a=read_b20_byte();b=read_b20_byte();point=(a & 0x0f)*625;tem_pnt=point/1000;tem_num=a>>4 | b<<4;if(tem_num & 0x80)tem_sign=1;elsetem_sign=0;}/*--- TIME FUNCTION-----*/void times_init(void){times=29;TMOD=0X01;TH0=0X3C;TL0=0XB0;ET0=1;EA=1;TR0=1;}void time0(void) interrupt 1{TR0 = 0;if(times==0){convert_cmd_b20();read_cmd_b20();tem_receive_b20();display_tem();times=29;}TH0=0X3C;TL0=0XB0;times--;TR0 = 1;}/*-----------HD7279-*/void HD7279_init(void){cs=1;clk=0;dat=0;key=1;delay_l(60); //25msHD7279_send_one(0xA4); //resetdelay_l(60);}void send(unsigned char cmd){unsigned char temp=8;dat_out1=cmd;clk=0;delay_s(20); //T1while(temp){dat=t1;clk=1;delay_s(4);//T2clk=0;dat_out1<<=1;delay_s(4); //T3temp--;}}void HD7279_send_one(unsigned char cmd){cs = 0;send(cmd);cs = 1;}void HD7279_send_two(unsigned char cmd,unsigned char dat2) {unsigned char temp=8;cs = 0;dat_out2=dat2;send(cmd);delay_s(6);//T4-T3while(temp){dat=t2;clk=1;delay_s(4);//T2clk=0;dat_out2<<=1;delay_s(4); //T3temp--;}cs = 1;}void display_tem(void){unsigned char n;unsigned char p;if(tem_sign==1){n=~(tem_num-1);p=~(tem_pnt-1);}else{n=tem_num;p=tem_pnt;}if(tem_sign == 1)HD7279_send_two(0x83,0x0a);else if(n >= 100)HD7279_send_two(0x83,0x01);elseHD7279_send_two(0x83,0x0f);n%=100;HD7279_send_two(0x82,n/10);n%=10;HD7279_send_two(0x81,n|0x80);HD7279_send_two(0x80,p);}。

《哈工大单片机》课件

《哈工大单片机》课件

控制等。
02
总结词
通过单片机实现对家居设备的智能化控制,提高生活便利性和舒适度。
03
详细描述
单片机作为智能家居系统的核心控制器,能够实现对家居设备的远程控
制、定时控制和语音控制等功能,提高家居生活的便利性和舒适度,同
时降低能耗和节约能源。
工业控制系统
工业控制系统
介绍单片机在工业自动化领域的应用,如数据采集、设备监控、生产过程控制等。
单片机的历史与发展
总结词
单片机的历史与发展
详细描述
单片机的发展历程可以分为三个阶段。第一阶段是单片 机诞生初期,主要代表产品是Intel于1971年为日本名 为名为Mitsubishi的电气集团开发的,该阶段单片机功 能简单,指令集短,位数不一。第二阶段是在20世纪 80年代初,随着微电子技术和计算机技术的发展,单 片机的指令集功能不断增强,位数也得到了统一,形成 了8位、16位、32位等不同位数的单片机。第三阶段是 进入21世纪后,随着嵌入式系统的发展,单片机也向 专业化、智能化方向发展,出现了各种具有特殊功能的 单片机,如DSP、ARM等。
03
C语言具有较好的可读性和可维护性,适合开发大型 项目。
其他编程语言
其他编程语言包括C、Java等 高级语言,也可以用于单片机 的开发。
这些高级语言可以提供更好的 抽象和封装,使开发更加方便 快捷。
但是这些高级语言运行效率较 低,需要经过解释或编译成机 器码才能运行。
04 单片机的开发环境
Keil软件
03
04
支持多种单片机型号, 如PIC系列、AVR系列 等。
支持多种操作系统,如 Windows、Linux等。
05 单片机开发流程

哈工大单片机实验报告

哈工大单片机实验报告

软件实验在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。

实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。

二、实验内容把2000~20FFh的内容清零。

三、程序框图四、实验过程(1)实验中定义R0为循环次数,利用定义了初值的数据指针DPTR不断加1指向需要被清零的外部数据存储器单元。

(2)再利用MOVX语句,将外部存储器指定内容清零。

(3)用CJNE比较语句判断循环是否结束。

五、实验结果及分析问题回答:清零前2000H~20FFH中为内存里的随机数,清零后全变为0。

六、实验源程序;清零程序ORG 0000HMOV DPTR,#2000HMOV R0,#0FFHORG 0660HMAIN: MOV A,#00HMOVX @DPTR,AINC DPTRDJNZ R0,MAINEND实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。

二、实验内容把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。

三、程序框图四、实验过程(1)定义数据指针DPTR为2000H,将其中内容送入累加器A中,利用高低四位交换语句SWAP可将高四位移至低四位,再用语句ANL与0FH进行与操作取出高四位送入2001H低位(2)再次让数据指针DPTR为2000H,将其中内容送入累加器A中,直接与0FH相与取出低四位送入2002H低位。

五、实验结果及分析问题回答:将ANL A,#0FH改为ORL A,#0F0H可以实现将高位置为1。

六、实验源程序;拆字程序ORG 0000HMAIN: MOV DPL, #00HMOV DPH, #20HMOVX A, @DPTRSWAP AANL A, #0FHINC DPTR-3-MOVX @DPTR, AMOV DPL,#00HMOVX A, @DPTRANL A, #0FHINC DPTRINC DPTRMOVX @DPTR, AEND实验三拼字程序一、实验目的进一步掌握汇编语言设计和调试方法。

哈工大单片机教程—chap2—MCS-51单片机的硬件结构

哈工大单片机教程—chap2—MCS-51单片机的硬件结构

其字节地址的末位是0H或8H可位寻址。
下面介绍SFR块中的某些寄存器。
表2-2
SFR的名称及其分布
1.堆栈指针SP
指示堆栈顶部在内部RAM块中的位置
复位后,SP中的内容为07H。
(1)保护断点
(2)现场保护 堆栈向上生长 2. 数据指针DPTR 高位字节寄存器用DPH表示,低位字节寄存器用 DPL表示。 3. I/O端口P0~P3 P0~P3分别为I/O端口P0~P3的锁存器。
(1) P0口:双向8位三态I/O口,此口为地址总线 (低8位)及数据总线分时复用口,可驱动8个LS 型TTL负载。 (2) P1口:8位准双向I/O口,可驱动4个LS型TTL 负载。 (3) P2口:8位准双向I/O口,与地址总线(高8 位)复用,可驱动4个LS型TTL负载。
(4) P3口:8位准双向I/O口,双功能复用口,可驱 动4个LS型TTL负载。
2.4.4
位地址空间
211个(128个+83个)寻址位。位地址范围为: 00H~FFH。 内部RAM的可寻址位128个(字节地址20H~2FH)见表 2-3(P24)。
特殊功能寄存器SFR为83个可寻址位,见表2-4 (P24)。
表2-3
内部RAM的可寻址位及位地址
表2-4 SFR中的位地址分布
注意:准双向口与双向三态口的差别。 • 当3个准双向I/O口作输入口使用时,要向该口先写 “1”。
• 准双向I/O口无高阻 “浮空”状态。
2.3 MCS-51的CPU 由运算器和控制器所构成 2.3.1 运算器 对操作数进行算术、逻辑运算和位操作。
1.算术逻辑运算单元ALU
2.累加器A
使用最频繁的寄存器,可写为Acc。
P0口某一位的电路包括:

哈工大单片机原理试验指导

哈工大单片机原理试验指导

《单片机原理》 实验指导书张毅刚 何谨 李华哈尔滨工业大学2007年4月目 录序-------------------------------------------------------------------------------------------------------------1实验1 单片机实验开发系统操作实验-------------------------------------2实验2 单片机数据区传送程序设计------------------------------------------4实验3 数据排序实验---------------------------------------------------------------------6实验4 查找相同数个数-----------------------------------------------------------------8实验5 P1口转弯灯实验---------------------------------------------------------------10实验6 工业顺序控制--------------------------------------------------------------------13实验7 8255控制交通灯---------------------------------------------------------------16实验8 A/D转换实验-----------------------------------------------------------------------19实验9 D/A转换实验-----------------------------------------------------------------------22实验10 电子时钟(定时器、中断综合实验)--------------------26附录1 DAIS-80958B单片机实验开发系统简介--------------------37附录2 实验开发系统的字形/字位/键值表---------------------------39序一、实验素养和一般知识1.实验前准备工作(1) 明确实验目的、熟悉实验内容、掌握实验步骤、了解所用单片机实验开发系统及仪器设备的性能。

哈工大单片机生产实习概要

哈工大单片机生产实习概要

生产实习报告姓名:张圣悦同组员:赫亮,金林,陈龙班级:自动化三班学号:130210307指导教师:谢玮,邵春涛2016年7月1目录1. 机器人控制器的焊接和调试 (3)1.1 控制器的原理图分析 (3)1.2 印制板图分析 (17)1.3 控制器主板的焊接 (20)1.4 控制器成品测试 (21)1.4 控制器外围器件综合测试 (101)2. 自选项目式实训 (129)3. 智能机器人的学习和操作 (144)3.1 AGV小车的学习和操作 (144)3.2 复杂智能机器人的学习和操作 (145)4. K215电源柔性开关自动化生产线的参观 (146)5. 谈谈您对工业4.0的认识 (146)6.生产实习的收获与体会(500字以内) (147)21.机器人控制器的焊接和调试控制器以STC89C52RC型号单片机为核心,并外接模块以实现特定的功能。

STC89C52RC是一个低功耗,高性能CMOS 8位单片机,片内含4k BytesISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用STC公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。

STC89C52RC具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。

同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。

外部资源共包括:4个扩展I/O口、蜂鸣器、继电器、ch340串口芯片、红外接收器、外部rom、超声波测距模块、独立按键、矩阵键盘、led灯、2个全双工串行通信口、液晶显示模块、八位共阳数码管、isp下载口、18b20接口等。

单片机原理与应用实验报告——温度测量显示及设定

单片机原理与应用实验报告——温度测量显示及设定

《单片机原理与应用》课程实验报告院系:班级:学生:学号:指导教师:设计时间:哈尔滨工业大学1 实验的目的、内容和设备1.1 实验的目的单片机综合实验的目的是训练单片机应用系统的编程及调试能力,通过对一个单片机应用系统进行系统的编程和调试,掌握单片机应用系统开发环境和仿真调试工具及仪器仪表的实用,掌握单片机应用程序代码的编写和编译,掌握利用单片机硬件仿真调试工具进行单片机程序的跟踪调试和排错方法,掌握示波器和万用表等杆塔工具在单片机系统调试中应用。

1.2 实验内容实验的内容是利用APP001开发板实现一个温度测量显示和控制的单片机应用系统,利用APP001开发板上的温度传感器测量温度,通过键盘输入一个稳定设定值,当测量温度高于设定温度时发出声音报警,开启散热风扇开关,并在LCD上显示实时温度值,设定温度值和散热风扇的开关状态,其中日期和时间利用单片机的定时器来产生,并能通过键盘来设定。

通过该实验学习和掌握以下的内容:1)MPLAB开发环境的使用,程序编写和排错及软件仿真2)利用MPLAB和ICD2对程序进行在线仿真和调试3)使用万用表和示波器等仪器对硬件系统进行测量和调试4)PIC18F452单片机的I/O和PWM驱动及编程方法5)PIC18F452单片机LCD和键盘接口及编程方法6)PIC18F452单片机的USART编程及与PC机的通讯方法7)利用Timer1外接32.768kHz的晶振产生RTC1.3 实验设备1)运行MPLAB的PC机2)示波器、万用表3)直流电源4)ICD2仿真器5)APP001多功能实验板2 总体设计2.1 硬件总体设计系统组成方案图1系统框图2.2 软件总体设计图2主程序框图图3 中断程序框图3 硬件设计1)散热风扇开发输出控制:实验中我们利用一个LED来模拟风扇状态,当散热风扇开关打开时,LED被点亮发光,当散热风扇关闭时,LED不发光。

开发板上的指示灯D11由RB2,低电平亮,高电平灭。

哈工程单片机实验

哈工程单片机实验
11
复位”按键按下,程序将TR0置为0,同时将存储时间的变 量清零,从而中断停止,并实现复位。
本题目采用专用数码管显示控制芯片MAX7219。 MAX7219是美国MAXIM公司生产的串行输入/输出共 阴极显示驱动器,该芯片最多可驱动8位7段数字LED显 示器或个LED和条形图显示器。其引脚图及引脚功能参 见有关参考资料。
2. 实验原理
产生指定波形可以通过DAC来实现,不同波形产生实质上 是对输出的二进制数字量进行相应改变来实现的。本题目中, 方波信号是利用定时器中断产生的,每次中断时,将输出的 信号按位反即可;三角波信号是将输出的二进制数字信号依 次加1,达到0xff时依次减1,并实时将数字信号经D/A转换 得到;锯齿波信号是将输出的二进制数字信号依次
8
K3—设置分钟。 K4—确认完成设置。 程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显
示“00:00:00”,然后开始计时。 2. 实验原理 题目难点在于键盘的指令输入,由于每个按键都具有相应的一
种或多种功能,程序中需要大量使用do{}while或while{} 循环结构,以检测是否有按键按下。按键检测函数的详解 如下(略)
本波形发生器的设计电路原理图,如下页图所示:
41
42
题目10 电容、电阻参数单片机测试系统的设计倒计数的时间。一旦按下键 则开始倒计数,当计数为0时,发出一阵音乐声。
程序执行后工作指示灯LED闪动,表示程序开始执行,按下 操作键K1~K4动作如下。
K1—可调整倒计数的时间1~60分钟。 K2—设置倒计数的时间为5分钟,显示“0500”。 K3—设置倒计数的时间为10分钟,显示“1000”。 K4—设置倒计数的时间为20分钟,显示“2000”。 复位后LCD的画面应能显示倒计时的分钟和秒数,此时按K1 键,

哈工大单片机课件

哈工大单片机课件

THE FIRST LESSON OF THE SCHOOL YEAR
哈工大单片机课件

CONTENTS
单片机基础知识单片机硬件结构单片机软件编程单片机开发流程单片机实际应用案例

01
单片机基础知识
总结词:单片机是一种集成电路芯片,它集成了中央处理器、存储器、输入输出接口等计算机的主要部件,具有体积小、功耗低、可靠性高等优点。根据不同的应用需求,单片机可以分为多种类型,如8位单片机、16位单片机、32位单片机等。
编写程序代码
在开发环境中调试程序代码,确保程序功能正确实现。
调试程序代码
根据需要,优化程序性能,提高系统运行效率。
优化程序性能
对制作的电路板进行调试,确保硬件电路工作正常。
硬件调试
将程序代码烧录到单片机中,进行软件调试,确保软件行优化,提高系统整体性能和稳定性。
汇编语言
C语言
Keil uVision
Keil uVision是一款流行的单片机编程软件,支持多种单片机型号和C语言开发。它具有友好的用户界面和丰富的调试功能,方便开发者进行程序编写、调试和烧写。
IAR Embedded Workbench
IAR Embedded Workbench是一款专业的单片机编程软件,支持多种单片机型号和C/C语言开发。它具有强大的编译器、调试器和项目管理功能,可以提高开发效率。
智能仪表系统可以实现的功能包括:温度、压力、流量等物理量的测量与控制、数据存储与传输等。
智能仪表系统的发展趋势是高精度、高可靠性和智能化,以满足工业生产和科学研究的不断升级需求。
01
机器人控制系统是利用单片机技术实现机器人运动和行为的智能化控制,从而提高机器人的自主性和适应性。

哈工大单片机原理及应用实验报告

哈工大单片机原理及应用实验报告

微处理器原理与应用实验报告姓名:李声勇同组人:袁钟达,张秋实学号:1080510123班级:0805101指导教师:张云院系:电子与信息工程学院1 实验一简单I/O口扩展实验(一)交通灯控制实验1.1实验要求扩展实验箱上的74LS273作为输出口,控制八个发光二极管燃灭,模拟交通灯管理。

1.2实验目的1.学习在单片机系统中扩展简单I/O接口的方法2.学习数据输出程序的设计方法3.学习模拟交通灯控制的实现方法1.3实验原理要完成本实验,首先必须了解交通路灯的燃灭规律。

本实验需要用到实验箱上八个发光二极管中的六个,即红、黄、绿各两个。

不妨将L1、L3、L5作为东西方向的指示灯,将L2、L4、L6作为南北方向的指示灯。

而交通灯的燃灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。

闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。

闪烁若干次后,再切换到东西路口方向,重复上述过程。

各发光二极管共阳极,阴极接有与非门,因此使其点亮应使相应输入端为高电平。

1.4 实验内容(包括实验电路和程序流程图)1.5 实验结果成功模拟交通灯管制系统,红绿灯方向指示正常,黄灯闪烁正常1.6 实验结果讨论分析实验中发现交通灯在黄灯和红绿灯切换的时候有抖动和延时,初步估计是单片机定时系统不稳定以及程序的延时冗余没有添加所导致。

1.7 实验程序代码变量说明:R1、R2、R3用来做延时控制变量。

EW段表示东西导通南北截止;SNBY是SN STAND BY的缩写,表示南北准备;SN段表示南北导通东西截止。

延时控制由若干延时控制单元组合而成(参考了一下老师的程序)。

片选地址和显示单元调用了老师的部分程序。

PORT EQU 0CFA0H ;片选地址CS0CSEG AT 0000HLJMP BEGINCSEG AT 4100HBEGIN: MOV A,#03H ;1、2亮,其余灭ACALL SHOW ;调用273显示单元ACALL T03 ;延时3秒EW: MOV A,#12H ;东西导通;南北截止ACALL SHOWACALL T10 ;延时10秒MOV A,#02H ;东西截止;南北截止ACALL SHOWSNBY: MOV A,#04H ;东西黄灯闪烁;南北截止ACALL SHOWACALL T02 ;东西黄灯5次闪烁程序MOV A,#00HACALL SHOWACALL T02MOV A,#04HACALL SHOWACALL T02MOV A,#00HACALL SHOWACALL T02MOV A,#04HACALL SHOWACALL T02MOV A,#00HACALL SHOWACALL T02MOV A,#04HACALL SHOWACALL T02MOV A,#00H ACALL SHOWACALL T02MOV A,#04HACALL SHOWACALL T02MOV A,#00H ;东西黄灯闪烁程序结束ACALL SHOWACALL T02 ;延时0.2秒MOV A,#02H ;东西路口黄灯灭;南北路口红灯亮ACALL SHOWACALL T02 ;延时0.2秒MOV A,#03H ;东西南北都截止ACALL SHOWACALL T02 ;延时0.2秒MOV A,#21H ;东西截止;南北导通ACALL SHOWACALL T10 ;延时10秒MOV A,#01H ;东西截止;南北截止ACALL SHOWSN: MOV A,#08H ;东西截止,南北准备ACALL SHOW ;南北黄灯闪烁程序ACALL T02MOV A,#00HACALL SHOWACALL T02MOV A,#08HACALL SHOWACALL T02MOV A,#00HACALL SHOWACALL T02MOV A,#08HACALL SHOWACALL T02MOV A,#00HACALL SHOWACALL T02MOV A,#08HACALL SHOWACALL T02MOV A,#00HACALL SHOWACALL T02MOV A,#08HACALL SHOWACALL T02MOV A,#00H ;南北黄灯闪烁截止 ACALL SHOWACALL T02 ;延时0.2秒MOV A,#01H ;东西截止;南北截止 ACALL SHOWACALL T02 ;延时0.2秒MOV A,#03H ;东西南北都截止ACALL SHOWACALL T02 ;延时0.2秒JMP EW ;转EW循环T10: MOV R1,#100 ;延时10秒JMP TU1T03: MOV R1,#30 ;延时3秒JMP TU1T02: MOV R1,#02 ;延时0.2秒TU1: MOV R2,#200TU2: MOV R3,#126TU3: DJNZ R3,TU3DJNZ R2,TU2DJNZ R1,TU1RETSHOW: MOV DPTR,#PORT ;273显示单元MOVX @DPTR,ARETEND2 实验二简单I/O口扩展实验(二)2.1实验要求利用74LS244作为输入口,读取开状态,并将此状态通过发光二极管显示出来。

哈工大单片机实验代码(张毅刚版教材)(10个)

哈工大单片机实验代码(张毅刚版教材)(10个)

电路图用张毅刚版教材里给的图!!!!1、流水灯#include<reg52.h>#include<intrins.h>void delay(){unsigned char i,j;for(i=0;i<255;i++)for(j=0;j<255;j++);}void main(){P2=0xfe;while(1){P2=_crol_(P2,1);delay();}}2、单个外部中断#include<reg52.h>#include<intrins.h>void delay(unsigned char delay_time){unsigned int i,j;for(i=0;i<=delay_time;i++)for(j=0;j<=100;j++);}void init_tx(){EA=1;EX0=1;IT0=0;}void main(){P1=0x00;init_tx();delay(200);while(1){P1=~P1;delay(200);}}void tx0() interrupt 0{P1=0xfe;while(!INT0){P1=_crol_(P1,1);delay(200);}P1=0xff;}3、定时器#include<reg52.h>unsigned char t=20;sbit button=P3^2;sbit yellowled=P1^0;/* 定义接口*/void main(){TMOD=0x01;/* 选择中断方式*/ EA=1;ET0=1;TH0=0x3c;TL0=0x0b;while(button==0){TR0=1;}yellowled=1;}void tx() interrupt 1{TH0=0x3c;TL0=0xb0;t--;if(t==0){yellowled=~yellowled;t=20;}}4、双机串行通信#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define outk P1#define out1 P0#define out2 P2uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; uchar key,send,rec;uchar scan(void);void delay(unit);void main(void){TMOD=0X20; TH1=0XF2;/* 设置定时器T1 为方式/* 给定时器T1 赋初值 */2*/TH1=0XF2;TR1=1;/* 接通定时器T1*/SCON=0X50;/* 串行口方式1, REN=1允许接收*/ PCON=0X00;/* SMOD=0*/EA=1;ES=1;EX1=1;EX0=1;while(1){outk=0x07;out1=seg[send];out2=seg[rec];}}uchar scan(void){uchar k=10,m,n,in;delay(10);outk=0x07;if((outk&0x07)!=0x07){for(m=0;m<3;m++){outk=~(0x01<<(m+3));for(n=0;n<3;n++){in=outk;in=in>>n;if((in&0x01)==0){if((in&0x01)==0){k=n+m*3;break;}}}if(k!=10)break;}}return(k);}void delay(uint j){uchar i;for(;j>0;j--){i=250;while(--i);i=249;while(--i);}}void ext0()interrupt 0{EX0=0;key=scan();if(key!=10)send=key+1;EX0=1;}void ext1()interrupt 2{ES=0;SBUF=send;while(!TI);TI=0;ES=1;}void com()interrupt 4{RI=0;rec=SBUF;}5、单片机与PC 串行通信#include <reg51.h>void send(unsigned char dat) {SBUF=dat;while(TI==0);;TI=0;}void init_tx(){EA=1;EX0=1;}void delay(void){unsigned char m,n;for(m=0;m<250;m++)for(n=0;n<250;n++);}void main(void){init_tx();TMOD=0x20;SCON=0x40;PCON=0x00;TH1=0xfd;TL1=0xfd;TR1=1;while(1);}void tx0() interrupt 0{unsigned char i=0;send(0x01);delay();i++;}6、扩展 82c55 并行 IO 接口#include<reg51.h>#include<absacc.h>#define uchar unsigned char #define uint unsigned intsbit rst_8255=P3^5;#define con_8255XBYTE[0x7003] #define pa_8255XBYTE[0x7000] #define pb_8255XBYTE[0x7001] void reset_8255(void);void delay(uint);void main(void){/*0x7003 为 82C55 的控制寄存器地址/* 以下定义pa、pb 的端口地址 */*/uchar temp;rst_8255=1;delay(1);rst_8255=0;con_8255=0x82;while(1){/* 复位 */temp=pb_8255;pa_8255=temp;/* 锁存 */}}void delay(uint j)/* 延时函数*/{uchar i;for(;j>0;j--){i=250;while(--i);i=249;while(--i);}}7、矩阵键盘#include<reg51.h>unsigned char codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delay(){unsigned char i,j;(延时)for(i=0;i<=25;i++)for(j=0;j<=25;j++);}unsigned char key_scan(){unsigned char key0,key1;unsigned char key_num=0;P1=0x0f; 先将 p1.0~P1.3 置高key0=P1;if(key0!=0x0f) 如果 P1.4~P1.7 不全为 1,可能有键按下{delay();key0=P1;if(key0!=0x0f){P1=0xf0;key1=P1;if(key0==0x0e){switch(key1){case 0xe0: key_num=0;break;case 0xd0: key_num=1;break;case 0xb0: key_num=2;break;case 0x70: key_num=3;break;default: key_num=0;break;}}else if(key0==0x0d){switch(key1){case 0xe0: key_num=4;break;case 0xd0: key_num=5;break; ( 处理 5 号键 )case 0xb0: key_num=6;break;case 0x70: key_num=7;break;default: key_num=0;break;(无效按键,如多个键同时按下)}}else if(key0==0x0b){switch(key1){case 0xe0: key_num=8;break;case 0xd0: key_num=9;break;case 0xb0: key_num=10;break;case 0x70: key_num=11;break;default: key_num=0;break;}}else if(key0==0x07){switch(key1){case 0xe0: key_num=12;break;case 0xd0: key_num=13;break;case 0xb0: key_num=14;break;case 0x70: key_num=15;break;default: key_num=0;break;}}}}return key_num;}void main(){unsigned char key_num;do{key_num=key_scan();P2=table[key_num];}while(1);}8、 1602 液晶显示#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define out P0sbit RS=P2^0;sbit RW=P2^1;sbit E=P2^2;void lcd_initial(void);void check_busy(void);void write_command(uchar com);void write_data(uchar dat);void string(uchar ad,uchar *s);void lcd_test(void);void delay(uint);void main(void){lcd_initial();while(1){string(0x82,"Hello Welcome");string(0xC2,"To China");delay(100);write_command(0x01);delay(100);}}void delay(uint j){uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}}void check_busy(void){uchar dt;do{dt=0xff;E=0;RS=0;RW=1;E=1;dt=out;}while(dt&0x80);E=0;}void write_command(uchar com){check_busy();E=0;RS=0;RW=0;out=com;E=1;_nop_();E=0;delay(1);}void write_data(uchar dat){check_busy();E=0;RS=1;RW=0;out=dat;E=1;_nop_();E=0;delay(1);}void lcd_initial(void){write_command(0x3c);write_command(0x0C);write_command(0x14);write_command(0x01);delay(1);}void string(uchar ad,uchar *s) {write_command(ad);while(*s>0){write_data(*s++);delay(100);}}9、 DA 转换#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define out P1sbit DAC_cs=P2^0;sbit DAC_wr=P2^1;void main(void){uchar temp,i=255;while(1){{out=temp;DAC_cs=0; DAC_wr=0;/* 片选端,芯片被选中/* 选通,并被锁存*/*/DAC_cs=1;/* 以下开始转换*/DAC_wr=1;temp++;while(--i);/* 延时函数!!,老师帮改的*/}}}10、 AD 转换#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define LED P0#define out P1sbit start=P2^1;sbit OE=P2^7;sbit EOC=P2^3;sbit CLOCK=P2^0;sbit add_a=P2^4;sbit add_b=P2^5;sbit add_c=P2^6;void main(void){uchar temp;add_a=0;add_b=0;add_c=0;while(1){start=0;start=1;start=0;while(1){CLOCK=!CLOCK;if(EOC==1){break;}OE=1;temp=out;OE=0;LED=temp;}}}。

哈尔滨工业大学单片机实验报告_图文(精)

哈尔滨工业大学单片机实验报告_图文(精)
CJNE R6,#00H,START
CJNE R7,#2FH,START
ADB: ADDC A,#00H
CLR C
RET
END
七、实验问答
1、R4、R5所定义的目的地址单元内容是什么?
从截图中可以看出R4、R5中为:01、09.
实验六查找相同数个数
一、实验目的
熟悉汇编语言编程。
二、实验内容
在2000~200Fh中查出有几个字节是零,把个数放在2100h中。
实验一清零程序
一、实验目的
掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容
把2000~20FFh的内容清零。
三、程序框图
四、实验过程
1、LED环境
⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。
⑵在“P.”状态下键入0640,然后按“STEP”或“EXEC”进入实验项目的调试与运行。
END;
如果将2001h、2002h高位置1,程序该如何修改?
修改方法很多,例如在2001H、2002H单元中加上1100H。
实验三拼字程序
一、实验目的
进一步掌握汇编语言设计和调试方法。
二、实验内容
把2000h、2001h的低位分别送入2002h高低位,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。
⑴在单步运行时每走一步可观察其运行结果。
⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查2002h内容变化六、实验源程序ORG 0000H;
MOV DPTR,#2000H; MOVX A,@DPTR;
四、程序框图
五、实验步骤

哈工大威海 单片机实验报告

哈工大威海   单片机实验报告

单片机实验报告学号:100250212姓名:指导教师:实验二一、 实验目的1 、 进一步了解开发系统的功能和使用;2 、 了解程序设计与调试的基本过程;3 、 了解简单程序和分支程序程序的特点和设计。

二、 实验内容1 、 简单程序的设计、输入、调试和运行;2 、 分支程序的设计、输入、调试和运行;三、 实验步骤1、设计、调试双字节乘法程序,功能为:(R2R3)*(R6R7)→R4R5R6R7 输入设计好的程序检查无误后,汇编。

向R2R3和R6R7中输入多组不同的数据,运行程序,观察R4R5R6R7中的内容,分析运行结果是否正确。

2、求符号函数⎪⎩⎪⎨⎧<=>=)0()0()0(1-01X X X Y ,设:X →30H ,Y →31H 输入设计好的程序检查无误后,汇编。

向30H 中输入多个不同的数据,运行程序,观察31H 中的内容,分析运行结果是否正确。

3、将ASCII 码转换十六进制数设ASCII码放在累加器A中,结果放回到A中,如果A中的内容不是十六进制的数的ASCII码,用户标志位F0置1。

输入设计好的程序检查无误后,汇编。

向A中输入多个不同的数据,运行程序,观察A中的内容,分析运行结果是否正确。

四、实验程序及分析结果1、双字节乘法运算程序程序如下:ORG 0000HLJMP MAINMAIN: MOV A, R3 ;先计算R7乘R3MOV B, R7MUL AB ;A中为积的低八位MOV R1,A ;将低八位存入R1中MOV R5,B ;将高八位存入R5中MOV A, R2 ;计算R7乘R2MOV B, R7MUL ABADD A, R5 ;R5加至AMOV R5, A ;将结果存入R5MOV R4, B ;将高位结果存入R4MOV A, R1MOV R7, A ;将低八位存入R7中JNC NEXT1 ;C为零则跳转MOV A, R4 ;如果C为1则将R4加一CLR CADD A, #01MOV R4, ANEXT1: MOV A, R3MOV B, R6MUL ABADD A, R5MOV R5, AMOV R1,BMOV A, R4JNC NEXT2CLR CADD A, #1NEXT2: ADD A, R1MOV R4, AMOV A, R2MOV B, R6MUL ABADD A, R4MOV R4, AMOV A, BJNC NEXT3CLR CADD A, #1NEXT3: MOV R1, AMOV A,R5MOV R6, AMOV A, R4MOV R5, AMOV A, R1MOV R4, AHERE: SJMP HEREEND总体思想为将该16位乘法拆分为四步8位乘法运算在进行带进位的相加程序中每段分别实现一个八位乘法,然后与上次运算结果相加。

单片机原理与应用——基于Proteus与KeilC哈工大出版社

单片机原理与应用——基于Proteus与KeilC哈工大出版社

第1章 单片机基础
符号 B A
PSW IP P3
IE
P2 SBUF SCON
P1 TH1 TL1 TH0 TL0 TMOD TCON PCON DPH DPL SP P0
表1.3 单片机片内的特殊功能寄存器SFR
名称
位地址(D7~D0)
B寄存器
F7~F0
A累加器
E7~E0或ACC.7~ACC.0
程序状态字
①寄存器区(00H-1FH)
这部分共有32个单元,是4组通用工作寄存器区,每个 区含8个8位寄存器,编号为R0~R7,可通过PSW(程序 状态字)中的RS0和RS1设定值来选择使用哪一组的寄存 器,RS1、RS0与片内工作寄存器组的对应关系如表1.1所 示。
表1.1 RS1、RS0与片内工作寄存器组的对应关系
特殊功能寄存器区
SFR
IDATA
80H 7FH
用户区
DATA
30H
2FH
位寻址区
BDATA
20H
1FH
寄存器区 00H
图1.4 89C51片内RAM分布图
第1章 单片机基础
89C51单片机真正的片内数据存储单元共有128个, 字节地址为00H~7FH。
主要三个区域: 寄存器区 位寻址区 用户区
第1章 单片机基础
这部分存储空间中只能进行字节寻址,共有80字节, 可以用作堆栈或数据缓冲区。
第1章 单片机基础
(3)SFR区 SFR(特殊功能寄存器)指的是片内数据存储区的高
128B单元,即在这个存储空间中用于存放控制命令、状态 或数据。除PC外,还有21个特殊功能寄存器,离散的分 布在该区域中,地址空间为80H~FFH,其中11个特殊功 能寄存器还可以进行按位寻址,表1.3是SFR的名称及其分 布,下面将对部分专用寄存器分类作简要介绍。这部分在 C51中如果是直接寻址方式对应着SFR;如果采用间接寻 址方式,对应着IDATA。这部分物理存储区和逻辑存储区 的对应关系如图1.3中所示。

单片机原理及应用_哈尔滨工业大学_1 第一讲单片机概述_2 11单片机基础知识

单片机原理及应用_哈尔滨工业大学_1  第一讲单片机概述_2  11单片机基础知识

灵活性强
简单方便 易学易掌握
08
658*695*180(单位:mil)
价格低
几元到几十元不等
04
单片机基础知识
——单片机的特点
嵌入到各种应用系统中
05
单片机基础知识
——单片机的特点
单片机的分类
通用型
• 人们通常所说是指通 用型单片机 • 内部可开发的资源全 部提供给用户
专用型
• 针对特定用途 • 全面综合地考虑结构 最简化、可靠性和成 本的最佳化
8位单片机
16位单片机
32位单片机
06
单片机基础知识
——单片机的特点
单片机+外围电路,灵活构成各种应用系统 工 业 自 动 检 测 监 视 系 统
数 据 采 集 系 统
智能仪器仪表
温湿度自动控制系统
07
单片机基础知识
——单片机的特点
优点突出,前景广阔
体积小 价格低
性价比高
嵌入容易
单片机系统
用途广泛
单片机基础知识
Harbin Institute of Technology
主讲人 张毅刚
单片机基础知识
——什么是单片机?
单片机的组成
单片机实质是用于控制目的单片微型计算机,简称单片机。
01
单片机基础知识
单片机应用广泛
——单片机的应用领域?
工业自动化
自动检测与控制
智能仪器仪表
机电一体化设备
汽车电子
家用电器
02
单片机基础知识
两种典型封装形式
——单片机的外形封装
双列Байду номын сангаас插(DIP)
方型封装 (PLCC或TQFP封装)

单片机功率接口技术(哈尔滨工业大学)

单片机功率接口技术(哈尔滨工业大学)
读锁存器
TB2 Vcc
内部上拉 电阻(L1)
2. 输出为低
P1.X
1. 向引脚写 0
内部 CPU 总线
写锁存器
D
Q
0
1
M1
P1.X
Clk Q
输出 0
TB1
读引脚
2.4.1.4 输入引脚读 “高”
读锁存器
TB2 1. 向引脚写 1 MOV P1,#0FFH 内部上拉电 阻(L1) Vcc 2. MOV A,P1 外部引脚为高
专用化 带有可编程逻辑
DSP
FPGA——Xilinx, Altera,
etc
1.3 单片机应用
1.3.1单机应用
在一个应用系统中, 只使用1片单片机称为单机应用, 这 是目前应用最多的一种方式。


测控系统:工业控制系统、 自适应控制系统、 数据采集 系统等,达到测量与控制的目的。 智能仪表:仪表数字化、智能化、多功能化、综合化、 柔性化。 机电一体化产品:机械产品结构简化,控制智能化。 智能接口:在计算机控制系统,特别是在较大型的工业 测 控系统中,用单片机进行接口的控制与管理,单片机 与主机的并行工作,大大提高了系统的运行速度。 智能民用产品

从功能上可分为: 5大部分

程序存储器 内部数据存储器、外部数据存储器 特殊功能寄存器 位地址空间
MCS—51单片机存储器空间结构图
(a) 程序存储器; (b) 内部数据存储器; (c) 外部数据存储器
(a)
(b)
(c)
2.4 MSC-51单片机I/O引脚
2.4.1 2.4.2 2.4.3 2.4.4 P0口 P1口 P2口 P3口
PSEN RD/ WR P2 P0 指令 PCL 输入 指令 PCL 输入 数据输入 数据输出 PCL PCH

哈工大电子信息工程学院单片机软件实验报告2016-张迎新版

哈工大电子信息工程学院单片机软件实验报告2016-张迎新版
MOV R0,#0BBH
MOV @R0,#01H
MOV R7,#00H
MOV R1,#0B0H
MOV R2,#10H
LP2:CJNE @R1,#00H,L3
INC R7
L3:INC R1
DJNZ R2,LP2
Loop:
jmp Loop
;===============================================
;===============================================
; RESET and INTERRUPT VECTORS
;===============================================
; Reset Vector
org 0000h
jmp Start
$NOMOD51
$INCLUDE (80C52.MCU)
;===============================================
; DEFINITIONS
;===============================================
;===============================================
END
姓名:
学号:
班级:
同组人:
指导老师:
报告日期:
软件设计实验3:查找相同数个数实验
实验目的:
熟悉汇编语言编程,掌握判断与跳转语句的使用。
实验内容:
使用AT89C52单片机对单片机内部RAM进行查找相同数,输出其个数的实验,实验内容如下:
1.初始化后,B0H-BFH地址的内容为#00H,将B9H的内容赋值为#01H,将BBH的内容赋值为#01H;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微处理器原理与应用实验报告姓名:吕静同组人:李珏然朱玲洁学号:6080510228班级:0836102指导教师:张云院系:实验学院1 实验一简单I/O口扩展实验(一)交通灯控制实验1.1实验要求扩展实验箱上的74LS273作为输出口,控制八个发光二极管燃灭,模拟交通灯管理。

1.2实验目的1.学习在单片机系统中扩展简单I/O接口的方法2.学习数据输出程序的设计方法3.学习模拟交通灯控制的实现方法1.3实验原理要完成本实验,首先必须了解交通路灯的燃灭规律。

本实验需要用到实验箱上八个发光二极管中的六个,即红、黄、绿各两个。

不妨将L1、L3、L5作为东西方向的指示灯,将L2、L4、L6作为南北方向的指示灯。

而交通灯的燃灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。

闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。

闪烁若干次后,再切换到东西路口方向,重复上述过程。

各发光二极管共阳极,阴极接有与非门,因此使其点亮应使相应输入端为高电平。

1.4 实验内容(包括实验电路和程序流程图)1.5 实验结果初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。

闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。

闪烁若干次后,再切换到东西路口方向,重复上述过程。

六盏灯,红黄绿按既定规律亮灭,且延时时间正常。

成功的完成了并行IO口扩展实验1.6 实验结果讨论分析实验成功的完成了IO口扩展实验,四盏灯按既定规律进行亮灭。

不过在实验过程中也出现了一些问题,通过我的认真分析原因,仔细调试,终于排除故障,试验成功。

讨论分析如下:1.由于是第一次使用该编译器做汇编语言实验,不清楚编译器的使用方法,由于C语言的使用习惯,经常在编程中不小心添加“空格”等在本编译器会被报错的非法字符,导致编译没通过,经过仔细检查,去掉了多余的空格,得到了正确的实验结果2.读实验电路图时,开始没有发现输出端口后面的反向驱动器,以至于编程都按照正向驱动器处理了,程序的所有输出数据完全编成了正确答案的反码,实验结果,各个灯亮灭结果根要求正好相反。

在重新分析实验电路图后,改正程序中的输出数据,即原数据取反,得到了正确的实验结果。

1.7 实验程序代码ORG 4000HAJMP MAINORG 4100HMAIN:MOV SP,#60H ;设置栈指针MOV DPTR,#0CFA0H ;输入口地址;MOV IE,#9FH ;设置中断允许;MOV IP,#1FH ;设置中断优先级MOV R0,#0AH ;设置循环次数LOOP1:MOV R1,#05H ;设置闪烁次数MOV R2,#05HMOV A,#03H ;两红灯亮MOVX @DPTR,AACALL DL1 ;延时3秒MOV A,#12HMOVX @DPTR,AACALL DL2MOV A,#02HMOVX @DPTR,ALOOP2:MOV A,#06H ;闪烁循环MOVX @DPTR,AACALL DL3 ;延时0.5秒MOV A,#02HMOVX @DPTR,A ;输出之前状态ACALL DL3DJNZ R1,LOOP2MOV A,#03HMOVX @DPTR,AACALL DL4MOV A,#021HMOVX @DPTR,AACALL DL2MOV A,#01HMOVX @DPTR,ALOOP3:MOV A,#09HMOVX @DPTR,AACALL DL3MOV A,#01HMOVX @DPTR,AACALL DL3DJNZ R2,LOOP3MOV A,#03HMOVX @DPTR,AACALL DL4DJNZ R0,LOOP1DL1: MOV R3,#1DH ;延时3秒DL11:ACALL DL ;调用延时0.1秒子程序DJNZ R3,DL11RETDL2: MOV R3,#64H ;延时10秒DL21:ACALL DLDJNZ R3,DL21RETDL3: MOV R3,#05H ;延时0.5秒DL31:ACALL DLDJNZ R3,DL31RETDL4: MOV R3,#02H ;延时0.2秒DL41:ACALL DLDJNZ R3,DL41RETDL : ;延时0.1秒MOV R4,#64HDL01:MOV R5,#7DHDL02:NOPNOPDJNZ R5,DL02DJNZ R4,DL01RETEND2 实验二简单I/O口扩展实验(二)2.1实验要求利用74LS244作为输入口,读取开状态,并将此状态通过发光二极管显示出来。

2.2实验目的1.学习在单片机系统中扩展简单的I/O口的方法。

2. 学习数据输入,输出程序的编制方法。

2.3实验原理MCS-51外部扩展空间很大,但数据总线口和控制信号线的负载能力是很有限的。

若需要扩展的芯片较多,则MCS-51总线口的负载过重,74LS244是一个扩展输入口,同时也是一个单向驱动器,以减轻总线口的负担。

程序中加了一段延时程序,以减少总线口读写的频繁程度,延时时间约为0.01秒,不会影响显示的稳定。

2.4 实验内容(包括实验电路和程序流程图)2.5 实验结果灯与对应的开关完全一致,开关闭合对应的灯亮,开关断开,对应的灯灭,完成了实验任务。

2.6 实验结果讨论分析开始实验时口地址设置出现问题,导致灯一直是灭的,闭合开关没有反应,后来发现是口地址的问题,修改口地址后得到正确的实验结果2.7 实验程序代码ORG 4000HAJMP MAINORG 4100HMAIN:MOV DPTR,#0CFA8H ;设置输入口地址MOVX A,@DPTRMOV DPTR,#0CFA0H ;设置输出口地址MOVX @DPTR,AACALL DL ;调用延迟子程序SJMP MAIN ;循环DL :MOV R0,#0AH ;延迟0.01秒子程序DL1 :MOV R1,#7DHDL2 :NOPNOPDJNZ R1,DL2DJNZ R0,DL1RETEND3 实验三中断实验——有急救车的交通灯控制实验3.1实验要求在实验三的内容基础上增加允许急救车优先通过的要求。

当有急救车到达的时候,两个方向上的红灯亮,以便让急救车通过,假定急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。

本实验以单脉冲为中断申请,表示有急救车通过。

3.2实验目的1、学习外部中断技术的基本使用方法。

2、学习中断处理程序的编程方法。

3.3实验原理交通灯的燃灭规律见实验三。

本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。

要保护的地方,除了累加器ACC,标志寄存器PSW外,还要注意:一是主程序中的延时程序和中断处理程序中的延迟程序不能混用,本实验给出的程序中,主程序延迟用的是R5、R6、R7。

中断延迟用的是R3、R4和新的R5。

第二,主程序中每执行一步经74LS273的端口输出数据的操作时,应先将所输出的数据保存到一个单元中。

因为进入中断程序后也要执行往74LS273端口输出数据的操作,中断返回时如果没有恢复中断前74LS273端口锁存器的数据,则显示往往出错,回不到中断前的状态。

还要注意一点,主程序中往端口输出数据操作要先保存再输出,例如有如下操作:MOV A, #0F0H (0)MOVX R1, A (1)MOV SA VE, A (2)程序如果正好执行到(1)时发生中断,则转入中断程序,假设中断程序返回主程序前需要执行一句MOV A,SA VE指令,由于主程序中没有执行(2),故SA VE中的内容实际上是前一次放入的而不是(0)语句中给出的0F0H,显示出错,将(1)、(2)两句顺序颠倒一下则没有问题。

发生中断时两方向的红灯一起亮10秒,然后返回中断前的状态。

3.4 实验内容(包括实验电路和程序流程图)主程序流程3.5 实验结果没有中断时,灯得亮灭完全符合规律。

初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。

闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。

闪烁若干次后,再切换到东西路口方向,重复上述过程。

当按下试验箱上的PULSE键时,两个红灯亮,十秒之后,恢复到按键之前的状态。

完成了中断及返回的控制实验。

3.6 实验结果讨论分析开始单片机在执行主程序,当收到外部请求中断时,如果符合中断被响应的条件,则转到外部中断的处理程序地址执行终端服务程序。

还要注意关中断,保护现场,开中断,处理,关中断,恢复现场,开中断的中断处理过程,不能前后倒置,否则会导致程序的不稳定。

3.7 实验程序代码ORG 4000HAJMP MAINORG 4003HAJMP INT ;跳转中断子程序ORG 4100HMAIN:MOV SP,#60HMOV DPTR,#0CFA0H ;设置口地址MOV IE,#81H ;设置中断允许MOV IP,#1FH ;设置中断优先级MOV R0,#0AH ;设置循环次数SA VE EQU 40HLOOP1:MOV R1,#05H ;设置闪烁次数MOV R2,#05HMOV A,#03HMOV SA VE,A ;保存当前输出状态MOVX @DPTR,AACALL DL1 ;调用延迟子程序MOV A,#012HMOV SA VE,AMOVX @DPTR,AACALL DL2MOV A,#02HMOV SA VE,AMOVX @DPTR,ALOOP2:MOV A,#06HMOV SA VE,AMOVX @DPTR,AACALL DL3MOV A,#02HMOV SA VE,AMOVX @DPTR,AACALL DL3DJNZ R1,LOOP2MOV A,#03HMOV SA VE,AMOVX @DPTR,AACALL DL4MOV A,#21HMOV SA VE,AMOVX @DPTR,AACALL DL2MOV A,#01HMOV SA VE,AMOVX @DPTR,ALOOP3:MOV A,#09HMOV SA VE,AMOVX @DPTR,AACALL DL3MOV A,#01HMOV SA VE,AMOVX @DPTR,AACALL DL3DJNZ R2,LOOP3MOV A,#03HMOV SA VE,AMOVX @DPTR,AACALL DL4DJNZ R0,LOOP1 DL1: MOV R3,#1AH DL11:ACALL DLDJNZ R3,DL11RETDL2: MOV R3,#64HDL21:ACALL DLDJNZ R3,DL21RETDL3: MOV R3,#05HDL31:ACALL DLDJNZ R3,DL31RETDL4: MOV R3,#02HDL41:ACALL DLDJNZ R3,DL41RETDL : MOV R4,#64H DL01:MOV R5,#7DH DL02:NOPNOPDJNZ R5,DL02DJNZ R4,DL01RETDL5 :MOV 41H,R0 ;中断延迟程序MOV R0,#64HDL51:MOV R6,#64HDL52:MOV R7,#7DHDL53:NOPNOPDJNZ R7,DL53DJNZ R6,DL52DJNZ R0,DL51MOV R0,41HRETINT :CLR EA ;关中断PUSH PSW ;现场保护PUSH ACCSETB EA ;开中断MOV A,#03H ;两红灯亮MOVX @DPTR,AACALL DL5 ;延迟10秒MOV A,SAVE ;输出中断前状态MOVX @DPTR,ACLR EAPOP ACC ;现场恢复POP PSWSETB EARETIEND4 实验四定时器实验----循环彩灯实验4.1实验要求由8031内部定时器1按方式1工作,即作为16位定时器使用,每0.1秒钟T1溢出中断一次。

相关文档
最新文档