51单片机用汇编编程使用定时器0,用定/计数器T0中断的方法定时0.5秒,使8个流水灯依次点亮,每个灯亮0.5秒

作者&投稿:栾委 (若有异议请与网页底部的电邮联系)
单片机的P0口接了8个发光二极 要求使用定时器T0中断实现流水灯操作流水频率为每0.5秒钟更替一次~

你问题标题和描述不一致。上面写T0下面写T1。我按照T1中断写。关于P0口流水,可以用数组,也可以用位移,还可以用内部函数。我这边用数组的方法写。

#include #define uInt unsigned int#define uChar unsigned char#define TFCNT 46080//经计算,11.0592MHZ,0.05秒需要计数次数uInt timeCnt=0;void init();void main(){uChar leds[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe},*p=leds;init();while(1){if(timeCnt>=10){timeCnt=0;P0=*p;if(p==&leds[7])p=leds;elsep++;}} }void init(){TMOD=0x10;//设置T1定时器16位模式TH1=(65536-TFCNT)/256;TL1=(65536-TFCNT)%256; EA=1;ET1=1;TR1=1;}void t1Intt() interrupt 3 {TH1=(65536-TFCNT)/256;TL1=(65536-TFCNT)%256;timeCnt++;}

TIME1S EQU 30H
TIME50ms EQU 31H


ORG 0000H ;程序入口
AJMP main

ORG 000BH ;TO中断入口
AJMP INT_T0


ORG 100H
main: MOV TIME1S,#0
MOV TIME50ms,#0
MOV TMOD ,#02H ;写控制字,将T0设为方式2( 8位自动重装)
MOV TH0, #06H ;THO和TL0的计算为:2的16次方-(晶振*定时时间 /12)
MOV TL0, #06H ;TC =0FFH-06H= 6H =6===》延时时间为(2^8-TC)*12/16 =250us 定时时间为250us
SETB TR0 ;启动T0
SETB ET0 ;允许T0中断
SETB EA ;开放CPU中断

LOOP: NOP


AJMP LOOP


INT_T0:PUSH PSW
PUSH ACC
INC TIME50ms
MOV A,TIME50mS
CJNE A,#200,INT_01 ;200次为TIME1S加1,此处时间为200*250us=50ms
MOV TIME50ms,#0
INC TIME1s
MOV A,TIME1S
CJNE A,#20,INT_01 ;此处再做20次即为1S
2020
MOV TIME1S,#0
;;;;;;;;;;;此处你可以编你要的程序,我在这里将P3。1脚取反,每秒变一次电平
CPL P3.1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


INT_01:POP ACC
POP PSW
RETI

END




注:以上设计为12M晶振,仿真通过。此方法并未达到精确的定时,因为8位定时器,要做好多4000次才完成1秒的定时。它的时间会延长了一点点,每一秒种有0。01秒的误差左右,要看你用的是什么单片机。若要精确定时建议用16位定时方式,这样误差会更小一点。

**********我爱梅梅头

改动如下:
……
INT_SUB:
MOV TH0,#3CH;重新给定时/计数器设初值
MOV TL0,#0B0H
DJNZ R7,LOOP;判断记时次数是否够,一次50毫秒,共十次
RL A
MOV P1,A
MOV R7,#10;重新给计时循环次数赋值
LOOP:
RETI

END

这就可以了。


单片机初学者,求助汇编程序练习。
START:MOV A, #00H \/\/欲传送的数据开始 MOV R0,#30H \/\/欲传送的地址入口 MOV R7,#10H \/\/R7存放数据个数10个 MOV A,@R0 \/\/数据开始传送到指定地址 INC R0 \/\/地址加1 INC A \/\/数据加1 DJNZ R7,START\/\/是否传送完0F个数据,否则转到start,是则顺序执行,进行下一步传...

单片机编程语言一般有哪几种
例如,懂得汇编语言指令就可以便用在片内ram作变量的优势,因为片外变量需要几条指令才能设署累加器和数据指针进行存取。同样的,当要求便用浮点数和启用函数时也只有具备汇编编程经验才能避免生成庞大的、效率低的程序,对于这方面的编程,没有汇编语言是做不到的。2.单片机的C语言 单片机的C语言是一种...

单片机“1的平方加到10的平方编程,用汇编”,紧急求解!
51单片机的程序如下;PING_FANG:MOV R6, #0 ;乘积先清零.MOV R7, #0 MOV R2, #1 ;从1开始.LOOP:MOV A, R2 MOV B, R2 MUL AB ;平方.ADD A, R7 ;加入到R6 R7中.MOV R7, A MOV A, R6 ADDC A, #0 MOV R6, ...

刚开始学习单片机,用循环语句(汇编)编程将20H—2FH存储单元分别置入0...
嘿嘿 这是一个循环结构 :1循环初始化: 循环次数 (R7)=16 次 变量累加器初始值(A)=0 数据指针(R0)=20H 即指向20H—2FH存储单元中的数据。2循环体: 使用传送指令 将累加器内容送给数据指针R0所指的单元 然后修改累加器的内容 即 累加器内容加1 3循环结束控制: 修改指针...

用汇编语言写单片机程序开头怎么写?
程序的基本框架如下 ORG 0000H LJMP START ;需要跳过中断服务程序入口地址,ORG 0100H START:MOV SP,#50H ;设堆栈区起始地址,一般不可少 ...SETB P0.0 SETB P0.3 ...LOOP:SETB P1.5 ;设定P1.5为输入状态 JB P1.5, NEXT ;假设P1.5为高是未达到既定值 CLR P0.0 ;达到既定...

求大神帮忙。单片机汇编语言编程
对应 92H... ...这些名字都是寄存器地址,其他单片机也一样,PA,PB,PC 也是地址 要SETB PA.0 首先要看PA这个寄存器能不能够位寻址,PA.O中的"."在汇编语言中是取位运算,一般做为引脚的寄存器都是可以位寻址的.还有对于不同的单片机,指令也可能不太相同,SONIX的单片机就是 B0BSET P1.0.

51单片机中,C语言中怎么加入汇编语言
1、在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码:2、在 Project 窗口中包含汇编代码的 C 文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;3、根据选择的编译模式,把相应的库文件(如 Small 模式...

单片机实验中,怎么用汇编比较大小?
单片机实验中,用汇编语言编程比较两个数大小,主要用SUBB减法指令,也可以使用CJNE指令。示例程序如下:;启动入口 ORG 0000H;复位启动 LJMP START;ORG 0100H;;;主控程序 START:MOV R0,#30H MOV X,#0 MOV Y,#0 LOOP:MOV A,@R0 CLR C SUBB A,#111 JNC NEXT CPL C MOV A,@R0 SUBB A,Y...

8051单片机的汇编程序编程问题!!!
既然向我求助,那我就写一下大概的思路和C语言程序,至于汇编语言,兄弟可自己由C语言翻译,我今天的确没太有时间.周期为2个ms的方波,也就是说半个周期为1ms,也就是说,P1.2每1ms翻转一次;同理,P1.3每3.5ms翻转一次,因为只能用一个定时器,所以,取1ms和3.5ms的最大公约数,是0.5ms,也就是说,...

c51单片机中如何用汇编语言编写流水灯
51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序:;假设晶振12MHZ,P1控制8个LED低电平亮 ;启动入口=== ORG 0000H;复位启动 AJMP START;ORG 001BH;T1中断 AJMP T1INT;...

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

江西省19874881593: 单片机汇编语言编程,通过用AT89C52单片机定时/计数器0的定时功能构成一简单的方波发生器 -
江露欣洫: ;启动入口 ORG 0000H ;复位启动 LJMP START ; ORG 000BH ;T0中断 LJMP T0INT ; ORG 0100H ; LJMP START ; YSJS EQU 30H ; ;主控程序 START: MOV SP,#80H ;初始堆栈值 MOV TMOD,#01H ;定时器0工作于方式1 MOV TH0,#0...

江西省19874881593: 51单片机 用定时器0设计 p1.0 口输出 100ms方波 汇编 -
江露欣洫: ORG 00H AJMP MAIN ORG 0BH AJMP T0INT ORG 30H MAIN:ACALL INIT_INT0 AJMP $ INIT_INT0:MOV TMOD,#01H MOV TH0,#03CH ;50ms中断 MOV TL0,#0B0H SETB EA SETB ET0 SETB TR0 RET T0INT:MOV TH0,#03CH MOV TL0,#0B0H CPL P1.0 RETI END

江西省19874881593: 51单片机汇编程序题.利用定时器0或1,对外部脉冲计数,没200次产生一次中断,将累加器加1,要求 -
江露欣洫: 嘿嘿 俺来帮你解决1 选择计数脉冲的上升沿 触发中断 即设外部中断0为边沿触发方式2 进入外部中断0的中断服务程序后,首先要让外部中断0关中断,避免计一个脉冲时产生多次中断.3 计数加1后,要延时一段时间,让计数脉冲稳定后,再让外部中断0重新开中断. 呵呵 赶快试试吧 如果对的话 就给俺加分吧

江西省19874881593: 采用12mhz晶体,利用定时器0在方式1情况下定时5ms,用汇编语言将设置的初值赋给相应的寄存器并 -
江露欣洫: 机器周期 =12/Fosc = 12/(12MHz) =1μs, 计数值C =5000μs/1μs =5000d 方式1用16位计数器, 计数初值a =2^16 -5000d =60536d =EC78h51单片机汇编程序如下:MOV TMOD, #01H ; ;定时器模式,方式1 MOV TL0, #78h ; ; 装入计数初值低字节 MOV TH0, #ECh ; ; 装入计数初值高字节 SETB TR0 ; ; 启动T0,开始计数

江西省19874881593: 51单片机定时器汇编程序
江露欣洫: TIMES EQU 30H LED EQU 31H FLAG BIT 00H ORG 0000H SJMP STA ORG 000BH LJMP T0ISR ORG 0030H STA: MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV TIMES,#0 CLR FLAG SETB TR0 SETB ET0 SETB EA LOOP: MOV ...

江西省19874881593: 怎么用51单片机定时1个小时 好像是循环,具体汇编程序是怎样的?? -
江露欣洫: 简单啊.大致说来就是 你先开启个定时器,根据你选用的晶振,计算出你要用定时器定时的基准时间,就假设是10毫秒吧.然后给定时器的THx,TLx写入初值,开启中断,进行定时.然后就等待中断.在你响应中断的程序中,再次给单片机送入初值,由于是10毫秒中断一次,因此我们设置几个“软件计数器” 比如每此中断,软甲计数器+1,例如“软件计数器1”在中断程序中计数100次,则是10ms*100=1s 而“软件计数器2”在1的基础上继续计数100次,则是1S*100=100S 而“软件计数器3”在2的基础上继续计数36次,则是100S*36=3600S=1小时.

江西省19874881593: 利用51单片机定时器实现时实时钟功能(汇编) -
江露欣洫: 51单片机有两个16位的定时器,若果采用方式1的话,计时16位,最大计时时间65536*1us=65.36ms,一个定时器 计时,一个定时器计数,完成一次的时间65.36ms*65536大于一个小时的时间,去适当的值,定时一周期一个小时,然后循环,在定时的过程中,把定时的秒数分别转化成小时,分钟和秒用LED显示,就行了.编程也很简单,书上第五,六章有定时器的用法.

江西省19874881593: 实现0到99通过单片机内部的定时计数器完成计数功能的汇编程序 -
江露欣洫: SECOND EQU 30H COUNT EQU 31H ORG 00H LJMP START ORG 0BH ;定时器0中断入口 LJMP INT_T0 START: MOV SECOND,#00H MOV COUNT,#00H MOV DPTR,#TABLE ;段码表首地址 MOV P0,#3FH ;数码管显示初始化 MOV P2,#...

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