单片机实验二 外部中断与LCD显示实验

单片机实验二 外部中断与LCD显示实验
单片机实验二 外部中断与LCD显示实验

实验二外部中断与LCD显示实验

一、实验目的

1、进一步熟悉利用PROTEUS、Keil uVision3等软件的使用方法。

2、理解单片机的中断、中断过程及其中断优先级原理,掌握中断服务子程序的编写方法。

3、掌握1602LCD工作原理与应用。

4、进一步掌握C51程序设计方法。

二、实验设备

计算机一台;单片机实验仪一台;Keil C51和Proteus软件。

三、实验内容

1、初始时灯D1(接P1.4)和灯D2(接P1.5)均亮。利用中断,按一次“加一”按钮(接P3.2)D1

亮暗发生一次变化,按一次“减一”按钮(接P3.3)D2亮暗发生一次变化,其中“减一”按钮的优先级高于“加一”按钮。按要求连接好电路,并编程实现上述要求。

2、1602LCD实时显示所计的数m(m初值为0),按一次“加一”按钮(接P3.2)时LCD上显示的数加一,按一次“减一”按钮(接P3.3)时LCD上显示的数减一,0≦m≦10000,即在计数过程中,若m=0再减一时m值仍为0,若m=10000再加一时m值仍为10000。

四、实验电路图

图1 1602LCD原理图

图2 独立按键原理图

图3 实验总仿真图

五、与1602LCD相关的部分函数(提示)

bit lcd_bz() //检测LCD是否忙

{

bit result;

rs=0;

rw=1;

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

result=(bit)(P0&0x80);

ep=0;

return(result);

}

void lcd_wcmd(unsigned char cmd) //写指令到LCD子程序{

while(lcd_bz());

rs=0;

rw=0;

ep=0;

_nop_();

_nop_();

P0=cmd;

_nop_();

_nop_();

_nop_();

_nop_();

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

ep=0;}

void lcd_pos(unsigned char pos) //写显示位置子程序

{

lcd_wcmd(pos |0x80);

}

void lcd_wdat(unsigned char dat) //写显示数据到LCD子程序{

while(lcd_bz());

rs=1;

rw=0;

ep=0;

P0=dat;

_nop_();

_nop_();

_nop_();

_nop_();

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

ep=0;

}

void delay(unsigned char n) //延时n毫秒

{

unsigned char i,j;

for(i=0;i

for(j=0;j<125;j++);

}

void lcd_init() //LCD初始化子程序

{

lcd_wcmd(0x38);

delay(1);

lcd_wcmd(0x0c);

delay(1);

lcd_wcmd(0x06);

delay(1);

lcd_wcmd(0x01);

delay(1);

}

六、实验内容1流程图

图4 主程序流程图 图5 INT0中断服务程序流程图 图6 INT1中断服务程序流程图

七、实验接线

1、1602的D7~D0接至单片机的P0.7~P0.0(板内部已接好)

2、1602的RS 、RW 、E 分别接至单片机的P2.6、P2.5、P2.7(板内部已接好)

3、单片机的P3.2、

P3.3分别接至JP5的K1、K2

4、单片机的P1.4、P1.5分别接至某一个LED 灯的输入端(J12的某个端子)

八、实验步骤

1、在正确的位置按正确的方向接上1602LCD

2、实验接线

3、编程、编译生成.HEX 文件

4、利用“PZISP 自动下载软件”进行下载,观察效果。

九、思考题

1、实验内容2中,若最大只能加到255,应如何解决?

2、采用中断有什么好处?

十、实验报告要求

1、实验目的

2、实验设备

3、实验内容

4、实验内容1和实验内容2的主要电路图(画出逻辑图即可,不必画出引脚图)

5、实验流程图(实验内容1和实验内容2)

6、实验源程序(实验内容1)

7、思考题解答

8、实验总结及心得体会(根据需要填写,该部分可省略)

实验四单片机中断优先级实验

实验四单片机中断优先级实验 一、实验目的 1.理解AT89C51单片机中断优先级和优先权。 2.用PROTEUS设计、仿真基于AT89C51单片机的中断优先级实验。 3.掌握中断编程。 4.掌握发光二极管的控制方法。 二、实验要求 单片机主程序控制P0口数码管循环显示0~8;外中断(INT0)、外中断(INT1)发生时分别在P2、P1口依次显示0~8;INT1为高优先级,INT0为低优先级。 三、电路设计 1.从 ① ②RES、 ③ ④CAP、CAP-ELEC:电容、电解电容; ⑤CRYSTAL:晶振; ⑥BUTTON:按钮。 2.放置元器件 3.放置电源和地 4.连线 5.元器件属性设置 6.电气检测 四、源程序设计、生成目标代码文件 1.流程图 2.源程序设计

通过菜单“source→Add/Remove Source Files…”新建源程序文件:。 通过菜单“source→”,打开PROTEUS提供的文本编辑器SRCEDIT,在其中编辑源程序。 程序编辑好后,单击按钮存入文件。 3.源程序编译汇编、生成目标代码文件 通过菜单“source→Build All”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至汇编成功。 五、PROTEUS仿真 1.加载目标代码文件 2.全速仿真 单击按钮,启动仿真。 (1)低优先级INT0中断主程序:当主程序运行时,单片机控制与P0口相接的数码管循环显示1~8;而P1、P2口的数码管不显示。当前主程序控制P0口显示“8”的时刻单击“低优先级输入”按钮,触发INT0如图所示,INT0服务程序控制P2口依次显示1~8,当前显示“2”。 (2)高优先级INT1中断低优先级INT0;在上一步的基础上,即主程序被INT0中断在P0口输出“8”,而在INT0服务程序在P2口输出“2”的时刻,单击“高优先级输入”按钮,触发高优先级INT1,所在INT0被中断在显示“2”,INT1服务程序控制P1口依次显示1~8。

实验三 单片机外部中断实验

实验三单片机外部中断实验 一、实验目的 1.理解单片机AT89C51的中断原理及其中断过程。 2.用proteus设计、仿真AT89C51单片机的外部中断。 外部中断是单片机AT89C51的重要功能,本实验用AT89C51单片机外部中断功能改变数码管的显示状态。当无外部中断0时,主程序运行状态为七段数码管的a~g段依次点亮,不断循环;当有外部中断0(单片机P3.2脚上有下降沿电压)输入时,立即产生中断,转而执行中断服务程序,数码管显示状态为“8”亮灭闪烁显示,亮灭闪烁显示8次以后,返回主程序原断点处继续执行,数码管继续段点亮的循环显示。 ③7SEG-COM-AN-GRN:绿色发光二极管; ④CAP、CAP-ELEC:电容、电解电容; ⑤CRYSTAL:晶振; ⑥BUTTON:按钮。 2.放置元器件

3.放置电源和地 4.连线 5.元器件属性设置 6.电气检测 四、源程序设计、生成目标代码文件 1.流程图 2.源程序设计 通过菜单“sourc e→Add/Remove Source Files…”新建源程序文件:DZC33.ASM。 通过菜单“sourc e→DZC34.ASM”,打开PROTEUS提供的文本编辑器SRCEDIT,在其中编辑源程序。 程序编辑好后,单击按钮存入文件DZC34.ASM。 3.源程序编译汇编、生成目标代码文件 通过菜单“sourc e→Build All”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至汇编成功。 五、PROTEUS仿真 1.加载目标代码文件 2.全速仿真 单击按钮,启动仿真。 3.仿真调试 (1)带断电仿真 五、思考题: 1、MCS-51单片机响应某一个中断请求的条件是什么? 2、8051单片机提供几个中断源?有几级中断优先级别?各中断标志是如何产生的又如何清除这些中断标志?各中断源所对应的中断入口地址是多少?

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想 ------- 屠呦呦 实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1;

void timer1_init() { TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(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 #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=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 // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int sbit D1=P2^0; //将D1位定义为P2.0引脚 uint counter=0; unsigned int unit=0,decade=0,avs=0;//time=0;

外部中断实验

1 外部中断实验 一、实验目的 1掌握外部中断技术的基本使用方法 2掌握中断处理程序的编写方法 二、实验说明 1、外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。中断方式设置一般有两种方式:电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.1)引入,本实验由INT0(P3.2)引入。 2、中断服务的关键: a 、保护进入中断时的状态。 堆栈有保护断点和保护现场的功能使用PUSH 指令,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。 b 、必须在中断服务程序中设定是否允许中断重入,即设置EX0位。 c 、用POP 指令恢复中断时的现场。 3、中断控制原理: 中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP 。 4、中断响应的过程: 首先中断采样然后中断查询最后中断响应。采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;否则继续为“0”。所谓查询就是由CPU 测试TCON 和SCON 中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。 INT0端接单次脉冲发生器。P1.0接LED 灯,以查看信号反转。 三、实验内容及步骤 1、使用单片机最小应用系统1模块,P1.0接发光二极管,INTO 接单次脉冲输出端。 2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源。 3、启动计算机,打开Keil 仿真软件,进入仿真环境。选择仿真器型号、仿真头型号、CPU 类型。 4、打开 中断.ASM 源程序,编译无误后,全速运行程序,连续按动单次脉冲产生电路的按键,发光二极管每按一次状态取反,即隔一次点亮。 5、可把源程序编译成可执行文件,烧录到89C51芯片中。 四、流程图及源程序 1、流程图 保护现场 设置初始状态 设置中断控制寄存器 开始 中断入口

单片机实验四报告材料_外中断实验

大学实验报告 学生:学号:专业班级: 实验类型:?验证?综合■设计?创新实验日期:2018.05.29 实验成绩: 实验四外中断实验 (一)实验目的 1.掌握单片机外部中断原理; 2.掌握数码管动态显示原理。 (二)设计要求 1.使用外部中断0和外部中断1; 2.在动态数码管上显示中断0次数,中断1用作次数清0,数码管采用74HC595驱动。 (三)实验原理 1.中断 所谓中断是指程序执行过程中,允许外部或部时间通过硬件打断程序的执行,使其转向为处理外部或部事件的中断服务程序中去,完成中断服务程序后,CPU返回继续执行被打断的程序。如下图所示,一个完整的中断过程包括四个步骤:中断请求、中断响应、中断服务与中断返回。 当中断请求源发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断处理程序处理中断服务请求。中断服务请求处理完后,再回到原来被中止的程序之处(断电),继续执行被中断的主程序。 如果单片机没有终端系统,单片机的大量时间可能会浪费在是否有服务请求发生的查询操作上,即不论是否有服务请求发生,都必须去查询。因此,采用中断技术大大地提高了单片机的工作效率和实时性。

2.IAP15W4K58S4单片机的中断请求 IAP15W4K58S4单片机的中断系统有21个中断请求源,2个优先级,可实现二级中断服务嵌套。由IE、IE2、INT_CLKO等特殊功能寄存器控制CPU是否相应中断请求;由中断优先级高存器IP、IP2安排各中断源的优先级;同优先级2个以中断同时提出中断请求时,由部的查询逻辑确定其响应次序。 中断请求源中的外部中断0(INT0)和外部中断1(INT1)详述如下: (1)外部中断0(INT0):中断请求信号由P3.2引脚输入。通过IT0来设置中断请求的触发方式。当IT0为“1”时,外部中断0为下降沿触发;当IT0为“0”时,无论是上升沿还是下降沿,都会引发外部中断0。一旦输入信号有效,则置位IE0标志,向CPU申请中断。 (2)外部中断1(INT1):中断请求信号由P3.3引脚输入。通过IT1来设置中断请求的触发方式。当IT1为“1”时,外部中断1为下降沿触发;当IT1为“0”时,无论是上升沿还是下降沿,都会引发外部中断1。一旦输入信号有效,则置位E1标志,向CPU申请中断。 中断源是否有中断请求,是由中断请求标志来表示的。在IAP15W4K58S4单片机中,外部中断 0、外部中断1等请求源的中断请求标志分别由特殊功能寄存器TCON和SCON控制,格式如下: (1)TCON寄存器中的中断请求标志。TCON为定时器T0与T1的控制寄存器,同时也锁存T0和T1的溢出中断请求标志及外部中断0和外部中断1的中断请求标志等。格式如下图所示: D7 D6 D5 D4 D3 D2 D1 D0 88H 与中断有关的各标志位功能如下: ①TF1:T1的溢出中断请求标志。T1被启动计数后,从初值做加1计数,计满溢出后由硬件 置位TFI,同时向CPU发出中断请求,此标志一直保持到CPU 响应中断后才由硬件自动清0。 也可由软件查询该标志,并由软件清0。 ②TF0:T0的溢出中断请求标志。T0被启动计数后,从初值做加1计数,计满溢出后由硬件 置位TF0,同时向CPU发出中断请求,此标志一直保持到CPU响应中断后才由硬件自动清 0。也可由软件查询该标志,并由软件清0。 ③IE1:外部中断1的中断请求标志。当INT1(P3.3)引脚的输入信号满足中断触发要求时,置 位IE1,外部中断1向CPU申请中断。中断响应后中断请求标志自动清0。 ④IT1:外部中断1(INT1)中断触发方式控制位。当(IT1)=1时,外部中断1为下降沿触发方式。 在这种方式下,若CPU检测到INT1出现下降沿信号,则认为有中断申请,随即使IE1标志 置位。中断响应后中断请求标志会自动清0,无须做其他处理。当(T1)=0时,外部中断1为

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能: (1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成) C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); }

Void main { EA=1; EX0=1; EX1=1; ITO=1; IT1=1; PX0=1; PX1=0; While(1); } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) { While(1) { P2_1=1; delay02s(); P2_1=0; delay02s(); } } }

单片机中断实验报告

实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer1_init() 开始 设置显示初值启动定时器 判断是否到59 继续 是 否

{ TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(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 #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=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 // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int

基于STM8的外部中断实验

例程四按键中断 其实在上个例程就说那个中断的,但不是重点说,例程四就重点说下这个中断的设置,主要是针对外部中断,对于其他的中断,到时在相应的模块里面会说的。在STM8S207RB这个芯片里面有很多IO口都可以触发中断的。主要是GPIO_A,GPIO_B,GPIO_C,GPIO_D,GPIO_E,这五组IO口都可以触发外部中断,所以大家以后要设计电路的话,必须先要查看先对应的文档来看下,了解清楚芯片的资料才好设置。其实大家学会调用库里面的函数的话,这些初始化相当来说就很容易的了。 以上外部中断的设置来自“STM8寄存器.pdf”文档第74页 下面看下电路图先吧,只要当你清楚电路具体的链接,才能完成相对应的初始化。

用到内部的资源 "stm8s_clk.h" "stm8s_exti.h" "stm8s_gpio.h" "stm8s_uart1.h" "stm8s_clk.c" "stm8s_exti.c" "stm8s_gpio.c" "stm8s_uart1.c" 看完了电路图,照样是先看主函数

在主函数里面最重要的是Buttom_Init();的初始化,其他的初始话上前几个例程已经有介绍过,相信大家也很清楚了。下面重点讲下Buttom_Init()。 函数原型: 第一条语句是设置Buttom1和Buttom2相对应的IO为上拉输入; 第二条语句是设置GPIOD,也即是按键,为下降沿触发中断。 __enable_interrupt();这条语句是开总中断,在上一个例程里面说过了,以后凡是有触发中断的都要用上这条语句,所以说这条语句很重要的。 下面讲下外部中断常用的几个函数,这些函数都是库有的,可以直接调用的。

实验5 ARM中断编程

实验五 ARM中断编程 一、实验目的 1.学习键盘驱动原理。 2.掌握中断的使用方法。 二、实验内容 通过ARM的外部中断进行键盘的扫描,利用中断服务程序编写键盘的驱动,在超级终端上显示相应的键值。UART接收中断,以中断方式(而不是查询方式)实现串口数据的接收 三、预备知识 1.掌握在ADS1.2集成开发环境中编写和调试程序的基本过程。 2.会使用UltraEdit编辑C语言源程序。 3.了解ARM中断服务程序的框架结构。 4.了解编译后的映象文件的下载方法。 四、键盘驱动程序的原理 1.简单键盘扫描 通常在一个键盘中使用了一个瞬时接触开关,并且用如图1所示的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的I/O口的输入将被拉低得到逻辑0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图2所示的好几个脉冲。弹起的持续时间通常将维持在5ms~30ms之间。如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。为此我将用到矩阵键盘。 图1 简单键盘电路

图2 键盘抖动 2. 复杂矩阵键盘扫描 键盘上陈列这些开关最有效的方法(当需要5个以上的键时)就形成了一个如图3所示的二维矩阵。当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O 端被连接的时候)。一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。矩阵所需的键的数目显然根据应用程序而不同。每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。 图3 矩阵键盘 键盘扫描过程就是让微处理器按有规律的时间间隔查看键盘矩阵,以确定是否有键被按下。一旦处理器判定有一个键按下,键盘扫描软件将过滤掉抖动并且判定哪个键被按下。每个键被分配一个称为扫描码的唯一标识符。应用程序利用该扫描码,根据按下的键来判定应该采取什么行动。换句话说,扫描码将告诉应用程序按下哪个键。

单片机外部中断实验

(仿真部分) 一、实验目的 1. 学习外部中断技术的基本使用方法。 2. 学习中断处理程序的编程方法。 二、实验内容 在INT0和INT1上分别接了两个可回复式按钮,其中INT0上的按钮每按下一次则计数加一,其中INT1上的按钮每按下一次则计数减一。P1.0~ P1.3接LED灯,以显示计数信号。 三、实验说明 编写中断处理程序需要注意的问题是: 1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。 2.必须在中断处理程序中设定是否允许中断重入,即设置EX0位。 3.INT0和INT1分别接单次脉冲发生器。P1.0~ P1.3接LED灯,以查看计数信号. 四、硬件设计 利用以下元件:AT89C51、BOTTON、CAP、CAP-POL、CRYSTAL、RES、NOT、LED-Yellow。设计出如下的硬件电路。晶振频率为12MHz。 五、参考程序框图 中断处理程序框图

(实验箱部分) 1.实验目的 认识中断的基本概念 学会外部中断的基本用法 学会asm和C51的中断编程方法 2.实验原理 图按键中断 【硬件接法】 P1.1控制LED,低电平点亮 P3.3/INT1接按键,按下时产生低电平 【运行效果】 程序工作于中断方式,按下按键K2后,LED点亮,1.5秒后自动熄灭。 8051单片机有/INT0和/INT1两条外部中断请求输入线,用于输入两个外部中断源的中断请求信号,并允许外部中断源以低电平或下降沿触发方式来输入中断请求信号。/INT0和/INT1中断的入口地址分别是0003H和0013H。 TCON寄存器(SFR地址:88H)中的IT0和IT1位分别决定/INT0和/INT1的触发方式,置位时为下降沿触发,清零时为低电平触发。实际应用时,如果外部的中断请求信号在产生后能够在较短时间内自动撤销,则可以选择低电平触发。在中断服务程序里要等待其变高后才能返回主程序,否则会再次触发中断,产生不必要的麻烦。 如果外部的中断请求信号产生后可能长时间后才能撤销,则为了避免在中断服务程序里长时间无谓等待,可以选择下降沿触发。下降沿触发是“一次性”的,每次中断只会有1个下降沿,因此中断处理程序执行完后可以立即返回主程序,而不必等待中断请求信号恢复为高电平,这是一个重要的技巧。 3. 实验步骤 ●参考实验例程,自己动手建立Keil C51工程。注意选择CPU类型。Philips半导体的P89V51RB2。 ●编辑源程序,编译生成HEX文件。 ●ISP下载开关扳到“00”,用Flash Magic软件下载程序HEX文件到MCU BANK1,运行。 运行Flash Magic软件。各步骤操作如下: Step 1: COM Port:选择实际使用的串行口,通常为COM1; Baud Rate:波特率不可设置得过高,推荐用9600; Device:请选择正确的型号89V51RB2; Interface:选择None(ISP)。 Step 2:请勾中“Erase blocks used by Hex File”。

单片机外部中断的使用

哈尔滨理工大学荣成学院 单片机原理及应用Protues 仿真实验 班级: 学号: 姓名: 日期:

实验三单片机外部中断的使用 一、实验名称:单片机外部中断的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4..实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 在Proteus 环境下建立如下仿真原理图,并保存为文件;

原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件;汇编语言参考程序如下:ORG 0000H

LJMP MAIN ORG H ;外部中断0程序入口地址LJMP EXINT0 ORG 0030H MAIN: MOV SP,#60H ;堆栈指针初始化 SETB ;设置外部中断 0 为边沿触发 SETB ;开外部中断0 SETB ;开CPU总中断MOV A,#01H LOOP: MOV P1,A RL A CALL DELAY SJMP LOOP DELAY: MOV R1,# ;延时250ms子程序DL1: MOV R2,# DL2: MOV R3,# DJNZ R3,$ DJNZ R2,DL2 DJNZ R1,DL1 ;延时子程序返回EXINT0: PUSH PUSH CLR RS1 SETB RS0 MOV R0,# LP: MOV P1,#0FFH CALL DELAY MOV P1,#00H CALL DELAY DJNZ R0,LP POP PSW POP ACC ;中断返回END 将以上程序补充完整,流水时间间隔,闪烁时间间隔为250ms。C51语言参考程序: #include #include #define uchar unsigned char #define uint unsigned int void delay_ms(uint x) { uint i; uchar j; for(i=0;i

单片机实验5外部中断

一、实验目的和要求 1、掌握中断系统外部中断源的使用方法。 2、掌握延时程序的编程及使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求 1、用Proteus软件画出电路原理图,在单片机的P1.0 口线上接按键K0 ,作为外部中断源0使用,用于 开启波形,在单片机的P1.1口线上接按键K1 , 作为外部中断源1使用,用于关闭波形。 2、在单片机的P1.2口线上产生周期50mS的连续方 波,在P 1.2口线上接示波器观察波形。 三、电路原理图。

四、实验程序流程框图和程序清单。 题一二汇编程序: ORG 0000H LJMP MAIN ORG 0003H LJMP K0 ORG 0013H LJMP K1 ORG 000BH LJMP TTC0 ORG 0050H MAIN: MOV SP, #6FH MOV TMOD, #01H MOV TH0, #9EH MOV TL0, #58H SETB EA SETB ET0 SETB EX0 SETB EX1 SETB PT0 SETB PX0 SETB PX1 SETB IT0 HERE: LJMP HERE K0: SETB TR0 RETI K1: CLR TR0 RETI TTC0: CPL P1.2 MOV TH0, #9EH MOV TL0, #58H RETI END 题一二C语言程序: #include #define unchar unsigned char #define uint unsigned int sbit P10=P1^0; sbit P11=P1^1; sbit P12=P1^2; void K0()interrupt 0 using 0 { TR0=1; void K1()interrupt 2 using 2 { TR0=0; } void TTC0()interrupt 1 using 1 { P12=!P12; TH0=0x9E; TL0=0x58; } void main () { SP=0X6F; TMOD=0x01; TH0=0x9E; TL0=0x58; EA=1; ET0=1; EX0=1; EX1=1; IT1=1; IT0=1 ; while(1); } 题一二程序流程图: 五、实验结果(波形图)。 题一二汇编程序仿真波形 题一二C语言程序仿真波形

基与89C51单片机外部中断实验

实验六外部中断实验一 一、实验要求 1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2.P1口上拉接8个LED; 3.在Keil软件中编写程序,对LED显示进行控制,显示方式有两种:(1)0、7亮,1、 6亮,2、5亮,3、4亮,0、7亮循环;(2))3、4亮,2、5亮,1、6亮,0、7亮, 3、4亮循环。 4.在P3.2连接一个按键,当按键弹起时引脚为高电平,当按键按下时引脚为低时平 5.编写程序:系统对LED显示进行控制,一开始显示方式为(1),当按下P3.2连接 的按键时,系统在(1)和(2)之间切换显示方式 二、实验目的 1.学习端口输入输出的高级应用 2.掌握LED查表显示法 3.掌握外部中断的工作原理 4.掌握外部中断程序设计 三.实验说明 (条理清晰,含程序的一些功能分析计算) 1.程序中void my_int(void) interrupt 0 using 1 { flag=!flag;} //中断子程序是中断子程序,就是按键按下中断一次。 2.以下是灯亮的方式改变,即flag取反一次就改变一次。通过i++或i—实现 变化。 while(1) { P1=LED[i]; //在P1口显示灯亮的方式 delay_ms(500); //延时0.05s if(flag) //判断P3^2开关是否按下 {i++; if(i>=4) //如果灯显示从两边到中间要在回到两边 i=0;} else{i--; if(i<0)//同上 i=3;} 四、硬件原理图及程序设计 (一)硬件原理图设计

(二)程序流程图设计 是 开始 定义变量 i=0;flag=1; P0=LED[i]; Flag ? i++; 否 i--; P3.3按下时进行中 断 Flag=flag!;

实验四外部中断

实验四外部中断实验 一、实验目的及要求 1、掌握51单片机的中断原理、中断处理过程及相关中断寄存器的设置 2、掌握中断功能的编程方法。 二、实验仪器与设备 1、PC计算机 2、51单片机开发板 3、相关软件,Keil 4、Proteus等 三、实验基本原理与内容 实验线路如4-1图所示,这里简单介绍一下80C51的中断功能,有关中断原理的内容,这里不做说明。AT89C52的中断系统有5个中断源:外部中断INT0.定时器/计数器T0.外部中断INT1.定时器/计数器T1和串口UART 中断,它们对应不同的中断矢量。 IE是中断允许寄存器,其中EX0、ET0、EX1、ET1、ES分别是上述5个中断的允许控制位,EA是中断总允许位,每个中断只有在相应中断允许且总中断也允许的情况下才能得到中断响应。5个中断都可以设为高.低2个优先级,IP是中断优先级寄存器,其中的PX0、PT0、PX1、PT1、PS位分别对应5个中断的优先级设置,置“1”时设定为高级中断,为“0”时是低级中断 图4-1 四、实验操作步骤

(1)在Keil4中编写代码生成hex文件 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit k3=P3^2; //定义按键K3 sbit led=P2^0; //定义P20口是led void delay(u16 i) { while(i--); } void Int0Init() { //设置INT0 IT0=1;//跳变沿出发方式(下降沿) EX0=1;//打开INT0的中断允许。 EA=1;//打开总中断 } void main() { Int0Init(); // 设置外部中断0 while(1); } void Int0() interrupt 0 //外部中断0的中断函数 { delay(1000); //延时消抖

单片机外部中断实验(附C语言程序)复习进程

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能:(1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成)

C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序{ unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } Void main { EA=1; EX0=1; EX1=1 ; ITO=1 ; IT1=1 ; PX0=1; PX1=0; While(1) ; } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) {

外部中断应用实验

外部中断应用实验 一、实验目的和要求 1、掌握中断系统外部中断源的使用方法。 2、掌握延时程序的编程及使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求 1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的P1.1口线上接按键K1 ,作为外部中断源1使用,用于关闭波形。 2、在单片机的P1.2口线上产生周期50mS的连续方波,在P 1.2口线上接示波器观察波形。 三、电路原理图 实验一电路原理图: 实验二电路原理图:

四、实验程序流程框图和程序清单 汇编程序清单:程序框图:实验一: ORG 0000H START: LJMP MAIN ORG 0100H LJMP LOOP1; ORG 0003H LJMP K0 ORG 0013H LJMP K1 MAIN: SETB EA SETB IT0 SETB IT1 SETB EX0 SETB EX1 MOV SP, #2FH; MOV TMOD, #01H; MOV TH0, #9EH; MOV TL0, #58H; LOOP1: JNB TF0, LOOP1 CPL P1.2; CLR TF0 MOV TH0, #9EH; MOV TL0, #58H; 开始 定时器、中断初始化 堆栈初始化 等待 结束 IPTO 取反P1.2 送定时初值 返回 EXINT0 调延时 开定时器0 返回 N Y Y KO按 下? KO松 开? EXINT1 调延时 关定时器0 返回 N N Y Y K1按 下? K1松 开?

51单片机外部中断实验

实验6 外部中断实验 (仿真部分) 一、实验目的 1. 学习外部中断技术的基本使用方法。 2. 学习中断处理程序的编程方法。 二、实验内容 在INT0和INT1上分别接了两个可回复式按钮,其中INT0上的按钮每按下一次则计数加一,其中INT1上的按钮每按下一次则计数减一。P1.0~ P1.3接LED灯,以显示计数信号。 三、实验说明 编写中断处理程序需要注意的问题是: 1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。 2.必须在中断处理程序中设定是否允许中断重入,即设置EX0位。 3.INT0和INT1分别接单次脉冲发生器。P1.0~ P1.3接LED灯,以查看计数信号. 四、硬件设计 利用以下元件:AT89C51、BOTTON、CAP、CAP-POL、CRYSTAL、RES、NOT、LED-Yellow。设计出如下的硬件电路。晶振频率为12MHz。 五、参考程序框图 开始 设置有关中断控制寄存器 开外中断INT0、INT1 设置P1.0~ 3初始状态 显示循环等待中断 INT0中断入口 计数加一 保护现场 恢复现场 中断返回

主程序框图INT0中断处理程序框图 实验6 外部中断实验 (实验箱部分) 1.实验目的 认识中断的基本概念 学会外部中断的基本用法 学会asm和C51的中断编程方法 2.实验原理 图按键中断 【硬件接法】 P1.1控制LED,低电平点亮 P3.3/INT1接按键,按下时产生低电平 【运行效果】 程序工作于中断方式,按下按键K2后,LED点亮,1.5秒后自动熄灭。 8051单片机有/INT0和/INT1两条外部中断请求输入线,用于输入两个外部中断源的中断请求信号,并允许外部中断源以低电平或下降沿触发方式来输入中断请求信号。/INT0和/INT1中断的入口地址分别是0003H和0013H。 TCON寄存器(SFR地址:88H)中的IT0和IT1位分别决定/INT0和/INT1的触发方式,置位时为下降沿触发,清零时为低电平触发。实际应用时,如果外部的中断请求信号在产生后能够在较短时间内自动撤销,则可以选择低电平触发。在中断服务程序里要等待其变高后才能返回主程序,否则会再次触发中断,产生不必要的麻烦。 如果外部的中断请求信号产生后可能长时间后才能撤销,则为了避免在中断服务程序里长时间无谓等待,可以选择下降沿触发。下降沿触发是“一次性”的,每次中断只会有1个下降沿,因此中断处理程序执行完后可以立即返回主程序,而不必等待中断请求信号恢复为高电平,这是一个重要的技巧。 3. 实验步骤 ●参考实验例程,自己动手建立Keil C51工程。注意选择CPU类型。Philips半导体的 P89V51RB2。 ●编辑源程序,编译生成HEX文件。 ●ISP下载开关扳到“00”,用Flash Magic软件下载程序HEX文件到MCU BANK1,运行。 运行Flash Magic软件。各步骤操作如下:

(中断、冒泡排序、1602)单片机实验报告

本科生实验报告 实验课程单片机实验 学院名称信息科学与技术学院 专业名称物联网工程 学生姓名曹林鑫 学生学号201413060301 指导教师谢兴红 实验地点6B607 实验成绩 二〇一六年九月二〇一六年十二月

实验一冒泡排序(汇编) 一.实验目的 掌握单片机的汇编语言排序程序。 二.实验内容 将单片机内部的数据进行排序,且使用汇编语言。 三.实验要求 根据实验内容编写一个程序,数据排列顺序要求是从小到大。 四.实验说明 先在片内RAM中存储一组数据,重复地走访过要排序的数据,一次比较两块内存上的数据,如果他们的顺序错误就把他们交换过来。走访数据的工作是重复地进行直到没有再需要交换,也就是说该列数据已经排序完成。 五.算法分析 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:,。 所以,冒泡排序最好的时间复杂度为O(n)。 若初始文件是反序的,需要进行n-1 趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: 冒泡排序的最坏时间复杂度为。 综上,因此冒泡排序总的平均时间复杂度为。 六.实验程序及分析 ORG 0000H LJMP main ORG 0100H main: MOV 40H,#05H//在40H-44H中随机存放五个立即数 MOV 41H,#08H

MOV 42H,#09H MOV 43H,#07H MOV 44H,#06H MOV R7,#04H//控制比较循环的次数 MOV R6,#04H LOOP3: MOV R0,#40H//指向需要进行比较的数据的地址 MOV R1,#41H// MOV A,R6 MOV R7,A CLR A LOOP1: CLR C MOV A,@R1 MOV 49H,A //交换数据前的备份 SUBB A,@R0//用进位标志判断两数的大小 JC LOOP LJMP LOOP4 LOOP: MOV A, @R0//恢复交换前的备份数据 MOV @R1,A MOV @R0,49H LOOP4: INC R0 INC R1 DJNZ R7,LOOP1//控制比较的次数 DJNZ R6,LOOP3//控制比较的轮数 LJMP $

相关文档
最新文档