单片机中断实验程序keil代码(单片机中断实验实验原理)

单片机外部中断做流水灯

单片机控制led灯亮和灭,led灯初始状态从左到右两个灯间隔一个灯循环亮灭,然后从右到左循环亮灭,,当按下按键,led灯全亮,然后全灭。然后再恢复循环。

二、实验过程

(一)实验项目的方案分析

1.设计原理

STC12C5A60S2单片机内部包括微处理器、存储器(存放程序指令或数据的ROM、RAM等)、输入/输出口(I/O口)及其他功能部件如定时/计数器、中断系统等。它们通过地址总线、数据总线和控制总线连接起来。

本实验充分利用了8051芯片的I/O引脚。系统已采用STC12C5A60S2系列单片机为中心器件来设计数码管显示系统,实现数码管循环显示。

2.器件配置清单

表1器件配置表

名称

型号

数值

数量

面包板

MB-102

165*55*

(二)实验项目的硬件电路设计

通过Proteus仿真电路软件搭建电路

(三)实验项目的程序设计

1、C51程序编写

2、keil软件调试截图

通过Keil软件进行C51控制程序的编写,通过不断调试修改,最终的调试好的Keil

调试无措的Keil程序

(四)实验项目的虚拟仿真

打开Keil C软件将上面程序输入,调试无误后编译输出".hex"文件,打开Proteus软件,将之前编译好的".hex"文件加入到芯片中,开始运行仿真。

(五)实验项目的实际验证电路及验证结果

将单片机C51程序编译无误后,生成HEX文件,通过STC-ISP下载到单片机中,下载的软件界面搭建的实际

单片机实验(proteus+keil)串行通信实验

我给你

程序:

#include reg51.h

volatile char temp;

volatile char flag;

void main(void)

{

P3 |= 0x03;

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

EA=1;

ES=1;

SM0=0;

SM1=1;

REN=1;

IP=0x00;

flag= 0;

while(1)

{

 while ( flag == 0 );

 flag = 0;

 TI = 0;

 SBUF = temp;

 while ( !TI );

}

}

void SerialIsr(void) interrupt 4

{

if(RI)

{

RI=0;

temp = SBUF;

flag = 1;

}

}

keil错误:error c129: missing ';' before 'unsigned' 程序怎么修改还是编译不了,请各位前辈指点,谢谢

原因:因为缺少';。解决步骤如下:

1.第一步是打开devc++5.11,然后进入以下界面。

2.接下来,输入以下代码。

3.然后单击下面的框并运行选项。

4.接下来,在下面的框中选择compile选项,如下图所示。

5.然后您可以在下面的框中看到错误。

6.下一步是通过搜索英语单词来寻找期望;'before'z'的意思是:在…之前;“然后通过查看代码找到缺失的第6行”;然后添加它。

7.如果最后进行编译,将发现错误为0,如下图所示。

(keli和Protus仿真软件)单片机中断实验程序代码,小部分有错误,求修改

一、代码写的也很清楚,问题也很明白。先说一下你这个程序想完成的功能吧:

P0口的数码管属于后台程序,他一直循环计数 0~8 。他能被任何一个中段所打断,并且该中断退出后,P0口的数码管能接着被打断之前的数字继续计数,而不是从 0 重新开始,这一点你的程序没有做到。

P2口的数码管由 INT0 中断控制,中断一次,只完成一次 0~8 的计数。他可以打断 P0 口,而不能打断 P1 口,因为 INT0 的优先级低。如果 INT0 被 INT1 打断了,INT1 退出后,INT0 应接着原来的数继续计数,而不是 INT1 退出之后,INT0 不会动了,这一点你的程序也没做到。

P1口的数码管由 INT1 中断控制,中断一次,也完成一次 0~8 的计数。他可以打断 P0口,也可以打断 P2口(INT0),他退出之后,被中断的程序应该恢复之前的工作。

这些问题都是由于在中断服务程序中,没有对现场进行保护引起的。问题找到了,解决方法很简单,就是在每个中断服务程序中加上现场保护就行了,即在每个中断服务程序的开始各加一条语句“PUSH    ACC”即可,现场恢复你的程序里边有。

二、下面是修改过的程序,并按照题目的要求添加了注释

ORG 0000H

SJMP STAR

ORG 0003H

SJMP INT0S

ORG 0013H

SJMP INT1S

ORG 0030H

STAR:

MOV IE,#85H //中断允许

MOV TCON,#05H  //低电平触发中断

MOV P3,#0FFH  //P3口拉高,为两个按钮服务

SETB PX1  //提高 INT1 的优先级

ST0:

MOV A,#1 //立即数 1 送 A,准备读 0 的段码

ST1:

PUSH ACC //入栈保存

ACALL SEG7 //去读段码

MOV P0,A //送 P0 口显示

ACALL DELAY  //延时一小会

POP ACC //把保存的 立即数弹回 A

INC A //A 自身加 1,为读取下一个段码做准备

CJNE A,#10,ST1 // A=10:往下走,否则转到ST1

SJMP ST0 //开始下一轮 0~8 的显示

INT0S:

PUSH ACC //该句是添加的,用于现场保护

MOV A,#0

LOOP:

INC A

PUSH ACC

ACALL SEG7

MOV P2,A

POP ACC

ACALL DELAY

CJNE A,#9,LOOP

POP ACC //原来就有,用于现场恢复

MOV P2,#0FFH

RETI

INT1S:

PUSH ACC //这句也是现场保护

MOV A,#0

LOOP1:

INC A

PUSH ACC

ACALL SEG7

MOV P1,A

POP ACC

ACALL DELAY

CJNE A,#9,LOOP1

MOV P1,#0FFH

POP ACC //现场回复

RETI

DELAY:

MOV R7,#250

D1:

MOV R6,#250

D2:

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

DJNZ R6,D2

DJNZ R7,D1

RET

SEG7:

MOVC A,@A+PC

RET  //这条语句一字节,所以执行上句之前 A 要加 1

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H

END

如果感到满意,你就跺跺脚,踩------纳!!!!!

Keil方法类_中断实验

中断系统和外部中断

实现一个C51单片机中断需要在中断请求标志位、中断允许标志位和

中断优先级控制位进行组合的实现。

下面举一个例子:

1)学会增加中断1并且能够设定优先级对于中断0的打断。

2)加入一个按键查询方式。

3)实现各自的花样流水灯。

头文件和定义引脚:

主函数程序:

主程序中 TCON = 0x00 or TCON = 0x01 or 不填,其实跟整个运行没关系,IE已经确定电平触发方式。

IP = 0x04 高级中断外部中断1(中断号2)对低级中断外部中断(中断号0)的控制。

中断函数1

中断函数2

延时函数

整个程序由几个部分组成:

头文件、主函数、中断函数、延时函数。

其实单片机中断可以很快入门,在学习TCON、IE、IP寄存器过程中,需要进行必要性的记忆,而且应该在每次设计C语言时必须设计程序框图,这样更好去编写程序和发现程序中的问题和编写技巧。

以下的是较为简单的程序图,但是过程较为复杂。注意每一个过程对应每一块模块程序。

361知讯网

本文链接:http://pdidw.com/keil/18053.html

发表评论

评论列表

还没有评论,快来说点什么吧~