单片机汇编,定时器中断流水灯,有点问题

作者&投稿:牟连 (若有异议请与网页底部的电邮联系)
单片机汇编,定时器中断流水灯,有点问题,只有第一个灯会亮~

一直用C语言写的是程序,汇编有好多年没写了 我给你一个例子吧!你自己琢磨下两者不同。
ORG 0000H
LJMP RESET ;开始时跳转转到初始化程序中

ORG 0003H ;外部中断0
RETI

ORG 000BH ;定时器/计数器T0入口地址
LJMP INT_TIMER0 ;跳转到定时器/计数器中断服务程序中去

ORG 0013H ;外部中断1
RETI

ORG 001BH ;定时器/计数器T1
RETI

ORG 0023H ;串行口中断
RETI

ORG 0030H
RESET:
MOV R0,#00H
DJNZ R0,$ ;刚开始,先进行少量的延时,是各种工作寄存器准备好
CLR LED


MOV TMOD,#00000001B ;设置定时器T0工作在方式1(16位)

MOV TH0,#HIGH(65536-COUNT);设置初值(关于怎么计算,很多书上都有)
MOV TL0,#LOW(65536-COUNT)
;MOV TH0,#(65536-COUNT)/256;取高八位数据(这是第二种方法)
;MOV TL0,#255 ;取底五位(为最大了)

CLR TF0 ;先把溢出标志位清零
SETB TR0 ;开始计时
SETB EA ;全局中断打开
SETB ET0 ;定时器/计数器T0溢出中断打开

MOV R2,#00H ;作为定时器累加器使用

LOOP: SJMP LOOP ;在此循环,等待中断


INT_TIMER0: ;当TF0=1,跳转到下面的中断服务程序中
INC R2 ;使R2自增一
CLR TF0 ;重新置中断标志位为0
MOV TH0,#(65536-COUNT)/256 ; 重新符初值(因为溢出后变成0了)
MOV TL0,#255
CJNE R2,#5,RETURN ;让灯明暗相间50ms
MOV R2, #00H
CPL LED ;让灯明暗交替变化
RETURN:
RETI

END

T0的中断号是0X000B, 不是0X001B,而0X001B是T1的中断号。计数是用的T0计数器,但中断开的是T1中断。因此不行

……

D1:
进入中断,必须重新装入初值。
下面两行,不可省略:
MOV TH0, #3CH // 定时50ms 循环20次,实现定时1s
MOV TL0, #0B0H // 3CB0H=15536 12MHZ 50000 50ms 20次

DJNZ R7, D2 //DJNZ减一不为0转移指令,进入循环
……

有什么问题你没说。


单片机汇编实验
3题目: P1口接8只发光二极管(L0~L7), T1作定时器,系统晶振6MHz。编写程序,让第1秒时L0~L3点亮, L4~L7暗;第2秒时L0~L3暗, L4~L7亮;第3秒时L0~L7全亮;第4秒时L0~L7全暗;第5秒时L0~L3点亮, L4~L7暗;如此循环下去...;这个有点复杂了……org 0h sjmp start org 0bh...

51单片机汇编程序题。利用定时器0或1,对外部脉冲计数,没200次产生一次...
ORG 0000H SJMP START ORG 000BH INC A RETI START: MOV TMOD, #06H MOV TH0, #56 MOV TL0, #56 SETB TR0 MOV IE, #82H SJMP $ END

单片机开发用C和汇编语言各有什么优缺点
汇编相对而言难度就大多了,一般人很难短时间内弄懂原开发者的原意和理清思路。2、C可移植性较强,一个单片机的程序稍加修改,可以移植到其他环境下使用,汇编程序几乎无法移植。3、汇编的时序性很强,可以精确严格按既定时序控制流程,C无法做到。4、汇编可以精确定时,C只能初略定时。

单片机汇编程序
JBC F0,ELSE;是当F0为1时,先置零F0再转移,否则F0为0时就继续下一次T0定时,同时由P3.5经出一个脉冲令T1计一个数。 当程序运行到满足条件F0为1时(经过6000次T0定时溢出,也就是达到1分钟T1溢出产生中断时,至于F0怎么置1程序中看不出,估计T1溢出的同时,由溢出信号将其置1或溢出时硬件置...

51单片机用汇编编程使用定时器0,用定\/计数器T0中断的方法定时0.5秒,使8...
改动如下:……INT_SUB:MOV TH0,#3CH;重新给定时\/计数器设初值 MOV TL0,#0B0H DJNZ R7,LOOP;判断记时次数是否够,一次50毫秒,共十次 RL A MOV P1,A MOV R7,#10;重新给计时循环次数赋值 LOOP:RETI END 这就可以了。

51单片机汇编程序???
故建议采用串口中断,在中断子程序中完成接收。这样主程序可以做主要任务。代码如下:(在楼上的基础上做了修改)ORG 0000H LJMP MAIN ORG 0023H LJMP RECE ORG 0030H MAIN:MOV SP,#5FH MOV TMOD,#20H ; 定时器1工作于8位自动重载模式,用于产生波特率 MOV TH1,#0FDH MOV TL1,#0FDH ; 波特率...

编程题(单片机)汇编语言
利用定时器中断实现的任务,请编译一下,若有问题欢迎追问。OORG 0000H SJMP MAIN;跳转到主程序 ORG 001BH AJMP Timer1_Interrupt;跳转到定时计数器T1中断子程序 MAIN: CLR P1.2;清P1.2 MOV TMOD,#50H;配置T1为外部16位计数 MOV TH1,#0FE;配置T1寄存器外部计数500个脉冲初值 MOV TH0,...

使用汇编语言编写利用定时器T0方式1,采用中断的方法产生100HZ的...
要求太简单,如下即够用:ORG 0000H SETB TR0 MOV IE, #82H SJMP $ ORG 000BH MOV TH0, #112 CPL P1.0 RETI END

单片机应用题,用c或汇编编程都可以。请把程序编写出来!谢谢!_百度知...
碧血玉叶花|来自团队百度贴吧达人团,这是个骗子。http:\/\/zhidao.baidu.com\/question\/648778409341753725.html 片外RAM从30H开始的数据区有100个数,要求每隔100ms向片内RAM以 10H开始的数据区传送20个数据,通过5次传送把数据全部传送完。用定时器1作定时,编写有关程序,设fosc=6MHz。用c或汇编编程...

急 单片机汇编 ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV SP,#40H 0100...
ORG 0100H是指明下面紧接的代码存放的起始地址为0100H 所以不能和中断入口地址(0000H - 002FH)重复了,MOV SP,#40H 是把堆栈指针设在#40H处(SP指向的是栈顶部所以常设在30H - 7FH的这一片RAM中),目测你的程序上压根没有用到堆栈,这个要不要都可以的,所以也随你改了,...

凌海市13237404406: 单片机汇编,定时器中断流水灯,有点问题 -
封彼海斯: …… D1:进入中断,必须重新装入初值.下面两行,不可省略: MOV TH0, #3CH // 定时50ms 循环20次,实现定时1s MOV TL0, #0B0H // 3CB0H=15536 12MHZ 50000 50ms 20次 DJNZ R7, D2 //DJNZ减一不为0转移指令,进入循环 ……

凌海市13237404406: 51单片机用定时器编的流水灯,出了些问题,请高手看一下! -
封彼海斯: #include"reg51.h" unsigned char s=0,a=128,count=0; void main() { TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; P1=~a; ET0=1; EA=1; while(1); } void T0_srv() interrupt 1 using 1 { TH0=0x3c; TL0=0xb0; s++; if(s==20) { count++; s=0; if(count>1; ...

凌海市13237404406: 51单片机定时器实现流水灯,并用按键外部中断控制改变流水灯的流向,这个程序怎么写?最好有注释,谢谢 -
封彼海斯: bit flag;//声明一个位变量 EA=1;//开总中断 EX0=1;//开外部中断0 IT0=1;//下降沿触发 while(1) { if(flag==0) { for(i=0;i<8;i++) { P0=0X01<<i;delayms(500); } } if(flag==1) { for(i=0;i<8;i++) { P0=0X80>>i;delayms(500);} } } 中断程序 void zhongduan() interrupt 0 { flag=!flag; }

凌海市13237404406: 51单片机把流水灯程序写在中断里为什么不能流了?哪里错了? -
封彼海斯: void main() { init(); while(1); //少了这条 }

凌海市13237404406: 51单片机,用定时器中断,在P1口实现1S移动一次的流水灯,用汇编语言编写的程序 -
封彼海斯: CNT EQU 30H ORG 0000H SJMP STA ORG 000BH LJMP T0ISR ORG 0050H STA: MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H ;50ms MOV P1,#0FEH MOV CNT,#20 SETB ET0 SETB TR0 SETB EA SJMP $ T0ISR: CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H ;50ms SETB TR0 DEC CNT MOV A,CNT JNZ T0ISRE MOV CNT,#20 MOV A,P1 RL A MOV P1,A T0ISRE: RETI END

凌海市13237404406: STC单片机定时器中断问题 -
封彼海斯: 程序是没有问题啊,运行正常的(每次中断P2=P2-1),检查一下硬件连接. 可以中断时间设置长一点 如 TMOD=0X01; // 用定时器方式1 中断时间会长很多

凌海市13237404406: 单片机流水灯汇编程序:中断程序,如何返回中断以前的状态? -
封彼海斯: int_0:push pswpush acccall loopmov a,#00h ;mov p1,a ;增加这两行,不就恢复初始状态了吗?pop accpop pswreti

凌海市13237404406: 大佬们,单片机汇编语言编写流水灯,全部八次闪烁,怎么编啊 -
封彼海斯: 51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果.以下是程序: ;假设晶振12MHZ,P1控制8个LED低电平亮 ;...

凌海市13237404406: 51单片机的流水灯程序.求修改(有错误) -
封彼海斯: 你的程序不是很合理,定时器的值错误,定时器,中断都配置了,但是没用到,可能对这些还不是很了解,给你个程序,是流水灯的,很短,自己去研究下,不明白的地方去查资料,不知道怎么查的话联系我也可以,祝成功. #include "reg52....

凌海市13237404406: 单片机C语言编程:控制流水灯 -
封彼海斯: T0 工作模式2 计时器中断,一次200us,1s流水灯左移或右移一次. k3触发外部中断0,级别高于计时器中断,故暂停. #include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit k1=P1^0; //左循环按钮 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网