本帖最后由 xxkj2010 于 2024-2-6 13:18 编辑
上午对T11的测试,开始的时候因为太粗心,没有加 P_SW2 |= 0x80;,导致测试失败,在论坛寻找帮助后解决了问题。
T11与其他定时器不同的是,它可以较长时间产生中断,因为它自带一个八位的分频器,
在24MHz的主频下,完全可以让它1秒产生一次中断,这是其他常规定时器力不能所及的。
STC太给力了!
代码如下:
main.c
-
- //STC8H2K17U 主频24MHz
- #include "stc8h.h"
- #define MAIN_Fosc 24000000L //定义主时钟
- typedef unsigned char u8;
- typedef unsigned int u16;
- typedef unsigned long u32;
-
- typedef unsigned char uchar;
- typedef unsigned int uint;
- typedef unsigned int ushort;
- typedef unsigned long ulong;
- void Timer11_Init(void); //1秒@24MHz
- //void delay_ms(u8 ms);
-
- u32 temp;
- void main()
- {
- P3M0 = 0x00;
- P3M1 = 0x00;
- P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能
- Timer11_Init();
- while (1)
- {
- // delay_ms(5);
- }
- }
-
-
-
- //void delay_ms(u8 ms)
- //{
- // u16 i;
- // do{
- // i = MAIN_Fosc / 10000;
- // while(--i); //10T per loop
- // }while(--ms);
- //}
-
-
- void Timer11_Init(void) //1秒@24MHz
- {
- T11CR=0x02;//1000 0010 T11作定时器,12T 模式,用系统时钟SYSclk
- T11PS=199;//总分频12*200,1秒计数为10000
- T11H=(65536-10000)>>8;
- T11L=65536-10000;
- T11CR |=0x80; //开始计数
- EA=1;
- }
-
-
- void Timer11_Isr(void) interrupt 13
- {
- P37=!P37;
- }
复制代码
isr.asm
- CSEG AT 021BH ;原T11中断号
- JMP 006BH ;跳转到13号中断入口
- END
复制代码
测试视频:
完整工程:
|