实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。/ /* 程序详细功能介绍:做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,输出“0”时,发光二极管亮,开始时

SETB IT0 SETB EX0 SETB IT1 SETB EX1 SETB EA MAIN:SJMP MAIN INEX0P:MOV P1,A RL A RETI ;--- INEX1P:MOV P1, A RR A RETI ;--- END

sbit alarm=P1^0;void delay(int a){ while(a--);} void ext0() interrupt 0 { for(m=0;m<6;m++)for(n=0;n<8;n++){ P0=led;led=_crol_(led,1);delay(20000);} alarm=0;delay(30000);alarm=1;

51单片机中断控制流水灯顺序的步骤如下:1、初始化中断向量表:将中断向量表中的全部中断向量初始化为0,确保中断发生时能正确跳转到相应的中断服务程序。2、配置中断优先级:设置中断优先级寄存器中的相应位,以确定各个中断的

T0 工作模式2 计时器中断,一次200us,1s流水灯左移或右移一次。k3触发外部中断0,级别高于计时器中断,故暂停。include #include #defineuint unsigned int#defineuchar unsigned charsbit k1=P1^

说一下思路吧。主程序做一个标志位A(初始赋值0),一个判断语句(if之类的)判断此标志位A,A为0时,流水灯右移,否则,流水灯左移。中断程序里,让A自加1,然后判断,等于2时,将A赋值为0,其他情况不变。希望能

用外部中断引脚做按键检测脚, 假设上升沿产生中断 ,开机时初始化标志变量等于0, 当第一次按下时 置标志(随便设置一个变量)为1,第二次按下时,置标志为0, 第三次按下时标志又为1 ,第四次按下时标志为0..

单片机汇编语言用外部中断0控制流水灯的移位方向,一开始灯向左移动第一次中断向后,第二次恢复向左,循环

一、P1口是输出还是输入?P1口是输入:如果你用的是89C51单片机的话,外部中断是在P3.2和P3.3引脚,P1口是没有的。所以,如果你既想用外部中断又想用P1口做控制输入端,就需要用“与(或)”逻辑电路从P1口导出中断

程序如下: 绝对没有错 LED灯的一端接P1口的各各引脚,另一端接地。同时在P1口的每个管脚上加1K的上拉电阻,电阻另一端连接至+5V即可 ORG 0000H AJMP START ORG 0030H START:MOV SP,#07H MOV P1,#00H MOV A

用定时器,每隔0.5秒中断一次,在中断服务程序中用P1和0xff异或再赋值给P1,可实现两组交替亮灭

p1=buff[n]; // p1的8个管脚根据数组中值来输出高低电平,//低电平时,LED亮 } } ///声明函数为中断服务函数其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器/// void Time0(void) interrupt 1 using

LED电平驱动,即P1口输出0时LED点亮 include define uchar unsigned char define uchar unsigned char //sbit led=P1^0;//sbit key=P3^2;bit key_on=0;//按键标识位,1则有按键按下 void main(void){

include void main(){ while(1){ p1=0x00;} } 这是闪烁度P1口回程序 include void delay(unsigned int i)//延时函数 { unsigned int k;for(k=0;k

MOV P2,#00H 我用的p2口输出给二极管 MOV P1,A 中断用的p1口,所以这里先给各位置一 WAIT_A:JB P1.0,WAIT_B 这是等待p1.0,看开关按钮有没有送入低电平 JMP LEFT 如果按下按钮开关,送入低电平

编程:89c51中,使用外部中断0,每次响应中断时,P1口依次输出高电平,使8个发光二极管依次循环熄灭闪烁

time=0;void main(){ EX0=1;EX1=1;EA=1;while(1){ P2=dispcode[time];} } void T() interrupt 0 { time++;if(time==10) time=0;} void T1() interrupt 2 { time--;if(time==0) time=9;}

1、按你显示程序的逻辑,对TAB修改如下:TAB:DB 00H,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H 即数据的首尾为0(这是个标记而已),中间才是七段码 0--F 的显示数据;

JMP START ORG 0003H JMP X0_INT ORG 0013H JMP X1_INT ;--- START:SETB IT0 SETB IT1 MOV IE, #85H MOV R2, #0 MOV DPTR, #TABLE ;--- M_LOOP:MOV A, R2 MOVC A,

WE=0;加延时 while(a);DU=1;P0=SMG[b];DU=0;WE=1;P0=0xfe;WE=0;加延时 while(~a);}

给你讲思路吧,先设置外部中段,打开中断开关。主程序可以利用一个for循环,每有一次中断就操作一次数组(数组元素加一或减一(其中数组对应的是数码管1~9的显示))

51单片机,用外部中断0和外部中断1实现:1个七段LED数码管显示值加1和减1。程序怎么编?

51单片机按键控制流水灯和数码管,P1口接8个LED灯,P0口接一个共阳数码管,P3.2和P3.3各接一个按键,分别用外部中断0和中断1。早蜂鸣器接在P2.7上。仿真图如下。

sbit LED=P1^0;unsigned int i;void InitTimer1(void){ TMOD = 0x10;TH1 = 0x0FE;TL1 = 0x0C;EA = 1;ET1 = 1;TR1 = 1;} void main(void){ InitTimer1();LED=1; //灭LED灯 while(1){ LED=0;

1 你的程序中使用的控制引脚为P1.1与电路图中控制LED的引脚P1.0也没有对应上啊 2 修改如下:include "reg51.h"sbit P1_0=P1^0;void main(){ P1_0=0; \\ P1.0为低电平时, LED为灭 } 3

EA=1;//开总中断 // EX0=1;//开外部中断0 3.2口,默认的是电平触发方式,如果需要用跳变沿触发,请设置下,INT0为P3.2口// num1=0;num2=0;num3=0;num4=0;while(1) //程序大循环// { wela=0x80;

while(!key);//等待按键松开 led=~led;} } flag_int1=0; //标志位清零 }EX1=1;//重新开始中断 } //外部中断初始化 void init_int1(void){ IT1=1;//边沿触发 EX0=1; //开总中断 EX1=1; //开外中断

求单片机程序 LED灯连接在P1.0管脚,要求使用外部中断0开灯,外部中断1关灯。

“为什么按下外部中断键就能让LED灯亮一下” 因为程序里面一旦进入外部中断,就把P1.0管脚翻转一下,如果接了LED就会有亮灭的变化。 “P10=!P10 是什么意思”、 将P1.0管脚的输出电平翻转。 “为什么我改成P20=!P20就报错” 因为程序里只定义了P10,P20这个符号没有定义,你需要自己添加 sbit P20 = P2^0; “开发板的外部中断焊接到单片机的P1.0引脚,如果我焊接的不是P1.0引脚,那P10=!P10还好使吗” 外部中断跟P1.0管脚没有关系。你重新看电路图去…… “为什么头文件加上#include“STC15.H”就会报错” 因为编译器找不到这个文件在哪儿,当然就会嗷嗷叫唤……
中断处理函数感觉有些问题,for循环之前使用P1=0x0f;然后将for内的P1=0x0f;改为 P1= ~ P1; 同时for 循环中应该需要调用延时函数 Delay(10); 这里的值看你自己设置,保证能分辨闪烁即可
看看这个仿真实例,汇编51单片机接四个数码管从0000显示到9999,采用外部INT0中断一次加1,INT1中断清零,用汇编语言。
P3.2的按键作为外部中断了,实现计数功能,所以,那个延时子程序没有用了。 关键问题是,凡是中断程序中所用的变量,要定义为全局变量。修改的程序如下。 #include #define uint unsigned int #define uchar unsigned char uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//你0的段码错误了 uchar i=0; //凡是中断程序用到的变量,一律定义为全局变量,而且不用定义成 unsigned int 型的变量。 /* void delay()//延时子程序没有用,注释掉 { uchar i,j; for(i=0;i<255;i--) for(j=0;j<255;j--); } */ void main(void) { //uint i;//删掉 while(1) { EA=1; EX0=1; IT0=1; P1=seg[i]; } } void int0() interrupt 0 using 1 { //uint i;//删掉 i++; if(i==10) i=0; } 仿真结果如下
org 0000h ajmp main org 0030h ajmp inter org 0030h main: mov ie,#10000001b mov r0,#1h flag: mov p1,#0ffh ajmp flag inter: mov a,r0 mov p1,a rl a lcall delay reti delay: mov r7 ,#20 d1: mov r6,#220 d2: mov r5,#200 djnz r5,$ djnz r6,d3 djnz r7,d1 ret end
#include unsigned char cont; /*声明cont*/ main() { while(1) /*无限循环*/ { P1=0x01; /*p1^0亮*/ TMOD=0x01; TH0=-50000/256; /*设置初值*/ TL0=-50000%256; EA=1; ET0=1; TR0=1; } } void int0() interrupt 1 { TH0=-50000/256; TL0=-50000%256; cont++; 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
外部中断一次给temp变量加一if(temp>=4){temp=0;}显示程序里就根据temp的值来确定流水灯的移动次数就可以实现了。
ORG 0000H LJMP MAIN ORG 0003H LJMP LEDST ORG 0100H MAIN:CLR IT0 SETB EA SETB EX0 MAINLOOP: MOV A,#0FFH CLR C MAINLOOP1:CALL DELAY RLC A MOV P1,A SJMP MAINLOOP1 JB P3.2 , LEDST SJMP MAINLOOP LEDST:PUSH ACC PUSH PSW MOV R2,#3 LED1: MOV A,#00H RL A CALL DELAY MOV P1,A ;//花样一,灯全部亮 MOV A,P1 RR A MOV P1,A SJMP LED2 LED2: CLR C MOV A,#0FH CALL DELAY SWAP A MOV P1,A SJMP LED3 ; //花样二,前四盏灯亮 LED3: SETB C MOV A,#55H CALL DELAY RRC A MOV P1,A ; //花样三,每隔一盏灯亮 DJNZ R2,LED1 POP PSW POP ACC RETI DELAY: MOV R7,#0 LOOP:MOV R6,#0 DJNZ R6,$ DJNZ R6,$ DJNZ R6,$ DJNZ R7,LOOP RET END达到的效果:1.主程序的流水灯是逐个亮2.按按钮,则开始用中断控制三种流水灯的花样3.三种花样闪烁三次返回主程序