stc15w408as定时器0测试程序

stc15w408as定时器0测试程序
stc15w408as定时器0测试程序

#include ""

#define uchar unsigned char

sbit LED=P1^0;

sbit LED1=P1^2;

sbit LED2=P1^4;

uchar time;

void initT0( )

{

AUXR &= 0x7F; //定时器时钟12T模式

TMOD = 0xF0; //设置定时器模式

TH0 = 0x04; //设置定时初值

TL0 = 0x00; //设置定时初值

TF0 = 0; //清除TF0标志

EA = 1;

ET0 = 1;

TR0 = 1; //定时器0开始计时

}

void main(void)

{

initT0();

while(1)

if(time==20) //20,1s

{

time=0;

LED=!LED; //LED,1s

LED1=!LED1;

LED2=!LED2;

}

}

void T0int( ) interrupt 1 {

TH0 = 0x00;

TL0 = 0x00;

time++;

}

LED呼吸灯C51源程序

* 【使用说明】: 晶振为11.0592M 利用定时器控制产生占空比可变的PWM 波 按K3,PWM值增加,则占空比减小,LED 灯渐亮 按K4,PWM值减小,则占空比增加,LED 灯渐暗 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 ******************************************************************************* ***/ #include #include sbit K1 =P3^4 ; //PWM值增加键 sbit K2 =P3^5; //PWM值减少键 sbit BEEP =P0^4; //蜂鸣器 unsigned char PWM=0x7f ; //赋初值 void Beep(); void delayms(unsigned char ms); void delay(unsigned char t); /*********************************************************/ void main() { P1=0xff; TMOD=0x21 ; TH0=0xfc ; //1ms延时常数 TL0=0x66 ; //频率调节 TH1=PWM ; //脉宽调节 TL1=0 ; EA=1; ET0=1; ET1=1; TR0=1 ; while(1) { do{ if(PWM!=0xff) {PWM++ ;delayms(10);} else Beep() ;

} while(K1==0); do{ if(PWM!=0x02) {PWM-- ;delayms(10);} else Beep() ; } while(K2==0); } } /*********************************************************/ // 定时器0中断服务程序(频率) /*********************************************************/ void timer0() interrupt 1 { TR1=0 ; TH0=0xfc ; TL0=0x66 ; TH1=PWM ; TR1=1 ; P1=0x00 ; //启动输出 } /*********************************************************/ // 定时器1中断服务程序(脉宽) /*********************************************************/ void timer1() interrupt 3 { TR1=0 ; P1=0xff ; //结束输出 } /*********************************************************/ //蜂鸣器子程序 /*********************************************************/ void Beep() { unsigned char i ; for (i=0 ;i<100 ;i++) { delay(100) ;

实验三单片机定时计数器实验

实验三单片机定时/计数器实验 1、实验目的 1、学习计数器的使用方法。 2、学习计数器程序的编写。 3、学习定时器的使用方法。 4、学习定时器程序的编写。 5、熟悉汇编语言 2、实验说明 1、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。 2、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转 3、实验仪器和条件 计算机 伟福实验箱(lab2000P) 4、实验内容 1、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。 2、外部事件计数脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。 3、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转 4、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD

用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON 主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。 5、在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。 五、思考题 1、使用其他方式实现本实验功能; 2、改为门控方式外部启动计数; 3、如果改为定时间隔为200us,如何改动程序; 4、使用其他方式实现本实验功能,例如使用方式1,定时间隔为10ms,如何改动程序。 六、源程序修改原理及其仿真结果 思考题一:使用其他方式实现本实验功能 方法一: movTMOD, #00000100b;方式0,记数器 movTH0, #0 movTL0, #0 setbTR0;开始记数;由于方式0的特点是计数时使用TL0的低五位和八位 TH0,故用加法器a用“与”(ANL)取TL0的低五位,再用yiwei子程序实现TH0的低三位变为高三位与TL0相加,这样赋给P1时就是八位计数的结果。 Loop: mova,TL0 anla,#1fh

最新51单片机花样呼吸灯程序

#include /*-----------定义单片机引脚--*/ sbit LED0=P1^0; sbit LED1=P1^1; sbit LED2=P1^2; sbit LED3=P1^3; sbit LED4=P1^4; sbit LED5=P1^5; sbit LED6=P1^6; sbit LED7=P1^7; void Delay(unsigned int t); //函数声明 unsigned int z,y; void main (void)//主函数 { unsigned int CYCLE=1000,PWM_LOW=0;//定义周期并赋值 while (1) //主循环 { /*--------整排LED灯呼吸---------*/ P1=0x00; Delay(1000); //加延时,可以看到熄灭的过程(下面程序同理) for(PWM_LOW=1;PWM_LOW0;PWM_LOW--) //与逐渐变亮相反的过程 { P1=0x00; //点亮LED Delay(PWM_LOW); P1=0xff; //熄灭LED Delay(CYCLE-PWM_LOW); //主循环中添加其他需要一直工作的程序,延时长度,600次循环中从599减至1 } /*--------第一颗LED灯呼吸---------*/ /* LED0=1; Delay(1000); for(PWM_LOW=1;PWM_LOW

51单片机密码锁制作的程序和流程图

51单片码锁制作的程序和流程图(很详细) 一、基本组成: 单片机小系统+4*4矩阵键盘+1602显示+DC电机 基本电路: 键盘和和显示 键盘接P1口,液晶的电源的开、关通过P2.7口控制 电机(控制口P2.4) 二、基本功能描述: 1.验证密码、修改密码 a)锁的初始密码是123456(密码最长为10位,最短为1位)。 2.恢复初始密码 a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。

3.使系统进入低功耗状态 a)在实际使用中,锁只有在开门时才被使用。因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。 b)同时将LCD背光灯关闭 4.DC电机模拟开锁动作。 a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。 三、密码锁特点说明: 1.0 输入将被以字符形式输入,最长为10位。 超过10位时系统将自动截取前10位、但不作密码长度溢出提示。 2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。 3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。 4.0 若2分钟无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。 5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。 6.0 修改密码键和恢复初始密码键最好置于室。 这是Proteus仿真结果: 输入密码123456: 显示结果: 密码正确时电机启动、电机将持续5秒:

单片机定时器详解

一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒; MCS-51单片机外接的是12MHZ的晶振(实际上是,所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令/秒=1000000次/1000000微秒=1次/微秒=1条指令/微秒;也就是说,晶振振荡一次,就会给单片机提供一个时钟脉冲,花费的时间是1微秒,此时,CPU会执行一条指令,经历一个机器周期;即:1个时钟脉冲=1个机器周期=1微秒=1条指令; 注:个人PC机上的CPU主频是晶振经过倍频之后的频率,这一点恰好与MCS-51单片机的相反,MCS-51单片机的主频是晶振经过分频之后的频率; 总之:MCS-51单片机中的时间概念就是通过计数脉冲的个数来测量出来的;1个脉冲=1微秒=1条指令=1个机器周期; MCS-51单片机定时器/计数器的简单结构图: 8051系列单片机有两个定时器:T0和T1,分别称为定时器和定时器T1,这两个定时器都是16位的定时器/计数器;8052系列单片机增加了第三个定时器/计数器T2;它们都有定时或事件计数功能,常用于时间控制、延时、对外部时间计数和检测等场合; 二、定时器/计数器的结构

单片机定时器实验程序

ORG 0000H LJMP START ORG 001BH ;定时器/计数器1中断程序入口地址 LJMP INT ORG 0100H START: MOV TMOD,#10H ;计数器置为方式1 MOV TL1,#0B0H ;装入时间常数 MOV TH1,#03CH SETB ET1 ;允许定时器T1中断 SETB EA ;允许总中断 SETB TR1 ;开始计数 MOV R0,#05H ;05是进入中断的次数LOOP: MOV R1,#00H MOV R2,#26H ;灯的状态循环次数LOOP1: MOV A,R1 ACALL TABLE MOV P1,A INC R1 LOOP2: CJNE R0,#00H,LOOP2 MOV R0,#05H DJNZ R2,LOOP1 LJMP LOOP TABLE: INC A ;从表中取显示码入累加器 MOVC A,@A+PC RET DB 0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,0H DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,00H,0FFH,0FEH DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH DB 0EFH,0F7H,0FBH,0FDH,0FEH,0FFH,00H,0FFH,00H INT: CLR TR1 ;停止计数 DEC R0 ;计数值减一 MOV TL1,#0B0H ;重置时间常数初值 MOV TH1,#03CH SETB TR1 ;开始计数 RETI ;中断返回 END

将T1改为T0,并且溢出间隔为0.05s ORG 0000H LJMP START ORG 001BH ;定时器/计数器1中断程序入口地址 LJMP INT ORG 0100H START: MOV TMOD,#01H ;计数器置为方式1 MOV TL1,#78H ;装入时间常数 MOV TH1,#0CH SETB ET0 ;允许定时器T1中断 SETB EA ;允许总中断 SETB TR0 ;开始计数 MOV R0,#05H ;05是进入中断的次数 LOOP: MOV R1,#00H MOV R2,#25H ;灯的状态循环次数 LOOP1: MOV A,R1 ACALL TABLE MOV P1,A INC R1 LOOP2: CJNE R0,#00H,LOOP2 MOV R0,#05H DJNZ R2,LOOP1 LJMP LOOP TABLE: INC A ;从表中取显示码入累加器 MOVC A,@A+PC RET DB 0FFH,07FH,3FH,1FH,0FH,07H,03H,01H,00H DB 80H,81H,0C1H,0C3H,0E3H,0E7H,0F7H,0FFH DB 00H,0FFH,00H,0FFH,0EFH,0E7H,0C7H,0C3H,83H,81H,01H,00H DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH INT: CLR TR1 ;停止计数 DEC R0 ;计数值减一 MOV TL1,#78H ;重置时间常数初值 MOV TH1,#0CH SETB TR1 ;开始计数 RETI ;中断返回 END

51单片机密码锁制作的程序和流程图

51单片机密码锁制作的程序和流程图(很详细) 一、基本组成: 单片机小系统+4*4矩阵键盘+1602显示+DC电机 基本电路: 键盘和和显示 键盘接P1口,液晶的电源的开、关通过P2.7口控制 电机(控制口P2.4) 二、基本功能描述: 1.验证密码、修改密码 a)锁的初始密码是123456(密码最长为10位,最短为1位)。 2.恢复初始密码 a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。

3.使系统进入低功耗状态 a)在实际使用中,锁只有在开门时才被使用。因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。 b)同时将LCD背光灯关闭 4.DC电机模拟开锁动作。 a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。 三、密码锁特点说明: 1.0 输入将被以字符形式输入,最长为10位。 超过10位时系统将自动截取前10位、但不作密码长度溢出提示。 2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。 3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。 4.0 若2分钟内无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。 5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。 6.0 修改密码键和恢复初始密码键最好置于室内。 这是Proteus仿真结果: 输入密码123456: 显示结果: 密码正确时电机启动、电机将持续5秒:

51单片机定时器秒表设计程序

51单片机定时器秒表设计程序 #include typedef unsigned char UINT8; typedef unsigned int UINT16; code UINT8 SEGMENT[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; code UINT8 SHU[10] ={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; code UINT8 SELECT[8] ={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; #define S1 0x0e #define S2 0x0d #define S3 0x0b #define S4 0x07 sbit SPEAK=P3^5; sbit P3_3=P3^3; UINT8 mSecond,Second; void Delay(UINT16 t) { UINT16 i,j; for(i=0;i

三路PWM呼吸灯程序及原理图

PWM三路呼吸灯系统 主要是靠定时器产生最小时间,通过定时中断重装定时值和置位标记位22H。 总原理图 中断按钮可以调节灯一(D3)的呼吸时间

两位数码管显示灯的呼吸时间 复位电路和晶振电路

程序如下: ORG 0000H LJMP S00 ORG 0003H LJMP AN ORG 000BH LJMP DSQ ORG 0030H S00: SETB P2.0 CLR P2.1 CLR P2.2 MOV IE,#83H SETB IT0 MOV TMOD,#01H MOV TL0,#0DCH MOV TH0,#0BH SETB TR0 MOV 30H,#00H //30H保存幅值 MOV 31H,#00H MOV 32H,#00H MOV 33H,#04H CPL P2.4 SETB 20H SETB 21H SETB 22H SETB 23H SS00: MOV C,22H //判断总刷新 JNC S003 CLR 22H SJMP S001 S003: LJMP S030 S001: CLR C //判断31H值,每段的加/减值MOV R2,30H CJNE R2,#00H,SS01 SETB 20H MOV 31H,#5 LJMP S019 SS01: MOV A,30H SUBB A,#50 JNC S010 MOV 31H,#5

S010: CLR C MOV A,30H SUBB A,#130 JNC S012 MOV 31H,#4 SJMP S019 S012: CLR C MOV A,30H SUBB A,#220 JNC S013 MOV 31H,#3 SJMP S019 S013: CLR C MOV A,30H SUBB A,#240 JNC S014 MOV 31H,#2 SJMP S019 S014: CLR C MOV R2,30H CJNE R2,#0FAH,S015 CLR 20H S015: MOV 31H,#1 S019: NOP S020: MOV C,20H //执行加/减JNC S021 CLR C MOV A,30H ADD A,31H MOV 30H,A MOV R2,A CJNE R2,#0FAH,S022 CLR 20H LJMP S029 S022: JNC S004 SJMP S029 S004: LJMP S00 S021: CLR C MOV A,30H SUBB A,31H MOV 30H,A JC S100

呼吸灯课程设计

郑州科技大学 《数字电子技术》课程设计 题目LED 呼吸灯 学生姓名 专业班级 学号 院(系) 指导教师 完成时间 2013年 3 月13日

目录 1 课程设计目的 (1) 2 课程设计任务与要求 (2) 3 设计方案与论证 (4) 3.1 设计任务分析 (4) 3.2 设计电路 (4) 3.3 调试 (5) 4 设计原理及其功能 (6) 5 单元电路的设计 (7) 5.1 LED日光灯 (7) 5.2 电阻 (8) 5.3 电容 (8) 5.4 三极管 (9) 5.5 LM358 (11) 6 硬件的制作与调试 (13) 6.1 电路焊接 (13) 6.2 功能实现 (13) 6.3 外观 (13) 7 设计总结 (14)

参考文献 (16) 附录一:总体电路原理图 (17) 附录二:元器件清单 (18)

1 课程设计目的 电子技术是一门实践性很强的课程,加强工程训练,特别是技能的培养,对于培养工程人员的素质和能力具有十分重要的作用。在电子信息类本科教学中,电子技术课程设计是一个重要的实践环节,它包括选择课题、电子电路设计、组装、调试和编写总结报告等实践内容。通过课程设计要实现以下两个目标:第一,让学生初步掌握电子线路的试验、设计方法。即学生根据设计要求和性能参数,查阅文献资料,收集、分析类似电路的性能,并通过组装调试等实践活动,使电路达到性能指标;第二,课程设计为后续的毕业设计打好基础。毕业设计是系统的工程设计实践,而课程设计的着眼点是让学生开始从理论学习的轨道上逐渐引向实际运用,从已学过的定性分析、定量计算的方法,逐步掌握工程设计的步骤和方法,了解科学实验的程序和实施方法,同时,课程设计报告的书写,为今后从事技术工作撰写科技报告和技术资料打下基础。

呼吸灯代码

写一段程序,使单片机上LED红·蓝·绿三种颜色的灯呼吸 #include"STC89C5xRC.h" void delay100Us(unsigned int cnt) { unsigned int i; while(cnt--) {i=6; while(i--) ; } } void delayMs(unsigned int cnt) { unsigned int i; while(cnt--) {i=82; while(i--) ; } } void delay(unsigned int t) { while(t--); } void main(void) { unsigned int CYCLE=600,PWM_LOW=0; P2=0; while(1) { delay(40000); for(PWM_LOW=1;PWM_LOW

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) { P20=1; P21=1; P22=0; delay(PWM_LOW); P20=1; P21=1; P22=1; delay(CYCLE-PWM_LOW); } delay(40000); for(PWM_LOW=1;PWM_LOW0;PWM_LOW--) { P20=1; P21=0; P22=1; delay(PWM_LOW); P20=1; P21=1; P22=1; delay(CYCLE-PWM_LOW); } delay(40000); for(PWM_LOW=1;PWM_LOW

51单片机PWM呼吸灯源程序

51单片机PWM-呼吸灯源程序 /** ************************************************* *************** * @file : main.c * @xu ran * @date : 2014年5月23日20:55:19 - 2014年5月23日22:32:12 * @version : V2.0 * @brief : PWM脉冲宽度调制技术实现呼吸灯 ************************************************* *************** * @attention * 实验平台 : 51hei开发板 * 单片机 : STC89C52RC MCU 晶振 : 11.0592 MHZ ************************************************* *************** */ #include //使用STC89C52库 /* 三八译码器74HC138 */ sbit ADDR3 = P1^3;

sbit ENLED = P1^4; sbit PWMOUT = P0^0; //LED0 /* PWM占空比 */ unsigned char code pwmTable[] = { 3, 5, 8, 11, 13, 16, 21, 24, 27, 30, 33, 36, 40, 45, 49, 53, 55, 57, 61, 65, 67, 69, 72, 75, 79, 82, 86, 89, 91, 93, 96, 99 }; // dc% /* PWM的高电平和低电平的定时器的重载值 */ unsigned char Highthr0, Hightlr0; unsigned char Lowthr0, Lowtlr0; /* 定时器T1计数装载值 */ unsigned char thr1, tlr1; /* PWM 频率计数值 */ unsigned long tmp = 0; /******************local function defines**************************/ void ConfigPWM(unsigned int fr, unsigned char dc); void ConfigTimer1(unsigned int xms); /************************************************

358呼吸灯CAD设计报告

《电子线路CAD》课程论文题目:358呼吸灯电路的设计

1 电路功能和性能指标 由LM358及外围电路构成了一个三角波信号发生器;三极管构成一个共射电路,将加在基极的三角波信号进行放大,并且由于基极的电压是一个三角波加在直流信号上,导致发射级的输出电压是一个上移的三角波信号,可以控制LED 灯的亮度,形成呼吸的效果。 2 原理图设计 2.1原理图元器件制作 图1 选择文件-创建-库-原理图库,然后进入原理图元器件编辑界面,放置矩形和引脚,并编辑引脚名画好图后如图1,然后点击工具-新器件编辑器件名,最后编辑它的名字和标注并添加如库中,或者直接放置到原理图中就行了。 2.2 原理图设计 新建一个项目后,保存为358呼吸灯,然后新建原理图添加入项目中,然后设置绘图环境就OK了。

绘制原理图如图二所示。 编译后发现有几个错误如图3,然后修改元器件名之后就可以了如图2。

图4 在原理图中,点击设计-生成集成库,然后就得到元器件库如图4。在设计过程中可能有的元器件在第一个库中没有,就需要在路径中搜索,如果还是没有就需要自己画原理图,就好像图中的J1原件。 2.3 原理图报表 图5

图 6 点击报告-元器件报,得到网络表如图5和图6。元器件报表可以使用户掌握本项目或某个元器件库中元器件的相关信息。元器件中以D1为例,它的封装名和标识符都可以看到。网络以NETC1_1为例,C1-1,JP1-1,R9-2引脚都属 于该网络。 图7 元器件清单如图7所示。 3 PCB设计 3.1元器件封装制作

图8 点击文件-创建-库-PCB库,然后选择版层来确定封装颜色,然后画好轮廓后,添加焊盘然后修改焊盘名与原理图元器件相对应,并修改封装名添加如封装库或直接放置如PCB图中即可。 3.2 PCB设计 图9 先新建一个PCB文件,并保存为358呼吸灯PCB,放入项目内,然后设置绘图环境,即可。在原理图界面点击设计-update-使变化生效,看有无错误,如果有就找到有错误的元器件然后在原理图中修改其封装,再检验错误,如果没有就点击执行变化,就可导入原理图中,然后自己摆放封装位置,确定物理边界和

单片机流程图

单片机总流程图

主函数程序 #include #include #define uchar unsigned char #define uint unsigned int #define OSC_FREQ 12000000 #define __10ms (65536 - OSC_FREQ/(12000000/9970)) #define COM8255 XBYTE[0XFFF3] #define PA8255 XBYTE[0XFFF0] #define PB8255 XBYTE[0XFFF1] #define PC8255 XBYTE[0XFFF2] uchar code tab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; uchar code dis_HELLO[]={0x89,0x86,0xc7,0xc7}; uchar code dis_op51[]={0xc0,0x8c,0x92,0xf9}; uchar code dis_code[]={0xcf,0xa4,0xcf,0xa4}; uchar ucCnt_10ms=99; uchar i=0; uchar J=0; uchar n=0; uchar led1; uchar led2; sbit P2_4=P2^4; sbit P3_7=P3^7; sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; void Disp_op51 (); void Disp_HELLO(); void Set_Init_Xint(); void Set_Init_Timer(); void Disp_t(); void DelayX1ms(uint count); void Disp_8255(); void main() { for(;;) { Set_Init_Xint(); Set_Init_Timer(); Disp_8255(); //ucCnt_10ms =99; //ucLed1 = 6; //ucLed2 = 8;

单片机定时器实验报告

XXXX大学信息工程与自动化学院学生实验报告 (2009 —2010 学年第二学期) 课程名称:单片机开课实验室: 2010年 5月14日 一.实验目的: 掌握定时器T0、T1的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 二.实验原理: MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。T1还可以作为其串行口的波特率发生器。 定时器T0由特殊功能寄存器TL0和TH0构成,定时器T1由TH1和TL1构成,特殊功能寄存器TMOD控制定时器的工作方式,TCON控制其运行。定时器的中断由中断允许寄存器IE,中断优先权寄存器IP中的相应位进行控制。定时器T0的中断入口地址为000BH,T1的中断入口地址为001BH。 定时器的编程包括: 1)置工作方式。 2)置计数初值。 3)中断设置。 4)启动定时器。 定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。

在编写中断服务程序时,应该清楚中断响应过程:CPU执行中断服务程序之前,自动将程序计数器PC内容(即断点地址)压入堆栈保护(但不保护状态寄存器PSW,更不保护累加器A和其它寄存器内容),然后将对应的中断矢量装入程序计数器PC使程序转向该中断矢量地址单元中以执行中断服务程序。定时器T0和T1对应的中断矢量地址分别为000BH 和001BH。 中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的操作一方面告诉中断系统该中断服务程序已经执行完毕,另一方面把原来压入堆栈保护的断点地址从栈顶弹出,装入到程序计数器PC,使程序返回到被到中断的程序断点处,以便继续执行。 因此,我们在编写中断服务程序时注意。 1.在中断矢量地址单元放一条无条件转移指令,使中断服务程序可以灵活地安排在64K 字节程序存储器的任何空间。 2.在中断服务程序中应特别注意用软件保护现场,以免中断返回后,丢失原寄存器、累加器的信息。 3.若要使执行的当前中断程序禁止更高优先级中断,可以先用软件关闭CPU中断,或禁止某中断源中断,在返回前再开放中断。 三.实验内容: 编写并调试一个程序,用AT89C51的T0工作方式1产生1s的定时时间,作为秒计数时间,当1s产生时,秒计数加1;秒计数到60时,自动从0开始。实验电路原理如图1所示。 计算初值公式 定时模式1 th0=(216-定时时间) /256 tl0=(216-定时时间) mod 256

基于STM32的呼吸灯

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

单片机定时器程序

实验十一定时器实验三 一、实验要求 1.将P2口和四个数码管的数据口相连,P1口和位选线相连接,电路用共阳极; 2.数码管显示4位从前两位分钟、后两位为秒;分钟和秒的值从00到59增加; 3.实现定时器1S的定时,每1S时间到时,使秒钟加一,当秒钟为60时,显示为00 秒,分钟加一;当分钟为60时,显示为00分,从新开始一个小时的计时。 #include //定义8051寄存器头文件 #define SEG7P P2 //定义数码管就接口在P2口 #define SCANP P1 //定义P3口为数码管位选口unsigned char TAB[]={ 0xc0,0xf9,0xa4,0xb0,0x99, //数字0~4的码值 0x92,0x83,0xf8,0x80,0x98 }; //数字5~9的码值unsigned int show_s,show_m; //定义变量show_s,show_m void Get_disp(char show_s1,char show_m1); //声明赋值函数 void Display(); //声明显示函数 void delay_ms(int x); //声明延时函数 char disp[4]; //定义显示数字数组 char scan[4]={0xfe,0xfd,0xfb,0xf7}; //定义位选扫描数组 main() //主程序的开始 { SEG7P=0xff; //赋初值关闭数码管 IE=0x82; //开启中断总开关和定时器0开关 TMOD=0x01; //设置模式为1 TR0=1; //开启定时器0 TH0=(65535-50000)/256; //设置定时器初值,计数高八位 TL0=(65535-50000)%256; //计数低八位 while(1) //无穷循环 { Get_disp(show_s,show_m); //调用赋值函数 Display(); //调用显示函数} } /*****定时器0中断子函数*****/ void TF_0(void) interrupt 1 { int T; TH0=(65535-50000)/256; //重新转载定时器的初值 TL0=(65535-50000)%256; T++; //计数自增 if(T==20) //判断T { T=0; //T回到初值 show_s++; //秒自增

STM32f103定时器输出PWM波驱动LED的呼吸灯

STM32f103 定时器输出PWM波控制LED输出呼吸灯 (根据正点原子程序) 定时器部分:time.c 与time.h Time.h函数 #ifndef __TIME_H #define __TIME_H void TIME_PWM_Init(u16 arr,u16 psc); #endif Time.c 函数 #include "time.h" // 定时器输出PWM波,控制LED(PD12),重映射到TIME4_CHI //******************************************************// void TIME_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE);// GPIO_PinRemapConfig(GPIO_Remap_TIM4,ENABLE); //重映射TIM4使能

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOD,&GPIO_InitStructure); // 初始化GPIO口为复用推完输出 // 初始化TIM4 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数 TIM_TimeBaseInitStructure.TIM_Period=arr; // TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//预分频系数 TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure); // 初始化TIM4_CHI—pwm模式 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;// 极性选择 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;// TIM_OC1Init(TIM4,&TIM_OCInitStructure); // TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable); // 使能TIM4在ccr1上的预装载寄存器 TIM_Cmd(TIM4,ENABLE); //使能TIM4 } Main函数 #include "stm32f10x.h"

单片机定时器详解教程文件

单片机定时器详解

一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒; MCS-51单片机外接的是12MHZ的晶振(实际上是11.0592MHZ),所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令/秒 =1000000次/1000000微秒=1次/微秒=1条指令/微秒;也就是说,晶振振荡一次,就会给单片机提供一个时钟脉冲,花费的时间是1微秒,此时,CPU会执行一条指令,经历一个机器周期;即:1个时钟脉冲=1个机器周期=1微秒=1条指令; 注:个人PC机上的CPU主频是晶振经过倍频之后的频率,这一点恰好与MCS-51单片机的相反,MCS-51单片机的主频是晶振经过分频之后的频率; 总之:MCS-51单片机中的时间概念就是通过计数脉冲的个数来测量出来的;1个脉冲=1微秒=1条指令=1个机器周期; MCS-51单片机定时器/计数器的简单结构图:

8051系列单片机有两个定时器:T0和T1,分别称为定时器和定时器T1,这两个定时器都是16位的定时器/计数器;8052系列单片机增加了第三个定时器/计数器T2;它们都有定时或事件计数功能,常用于时间控制、延时、对外部时间计数和检测等场合; 二、定时器/计数器的结构 8051单片机的两个定时器T0和T1分别都由两个特殊功能寄存器组成;T0由特殊功能寄存器TH0和TL0构成,而T1则是由TH1和TL1构成; 作为定时器使用时,定时器计数8051单片机片内振荡器输出经过12分频后的脉冲个数,即:每个机器周期使定时器T0/T1的寄存器值自动累加1,直到溢出,溢出后继续从0开始循环计数;所以,定时器的分辨率是时钟振荡频率的1/12; 作为计数器使用时,通过引脚T0(P3.4)或T1(P3.5)对外部脉冲信号进行计数,当输入的外部脉冲信号发生从1到0的负跳变时,计数器的值就自动加1;计数器的最高频率一般是时钟振荡频率的1/24; 由此可知,不论是定时器还是计数器工作方式,定时器T0和T1均不占用CPU的时间,除非定时器/计数器T0和T1溢出,才可能引起CPU中断,转而去执行中断处理程序;所以说,定时器/计数器是单片机中效率高而工作灵活的部件; 三、定时器/计数器的工作模式 除了可选择定时器和计数器的这两种工作方式外,每个定时器/计数器都有4种工作模式; 在模式0、1和2时,T0和T1的工作模式相同;在模式3时,两个定时器/计数器的工作模式不同; 工作模式0: 由TL0的低5位和TH0的全部8位共同构成一个13位的定时器/计数器;定时器/计数器启动后,定时或计数脉冲个数加到TL0上,从预先设置的初值(时间常数)开始累加,不断递增1;当

相关文档
最新文档