神农鼎
发表于 2023-11-27 21:44:31
380091044 发表于 2023-11-27 21:33
感谢提醒,这个是库里面也有的,手册里面也见到了
你可能是库的数据手册,STC8H芯片手册没这个
你把完整的贴上来,就是工程师的做法
380091044
发表于 2023-11-27 21:49:58
神农鼎 发表于 2023-11-27 21:44
你可能是库的数据手册,STC8H芯片手册没这个
你把完整的贴上来,就是工程师的做法
...
有的
神农鼎
发表于 2023-11-28 09:29:58
//看到你贴的图了:
#include "reg51.h"
#include "intrins.h"
sfr T4T3M = 0xd1;
sfr T4L = 0xd3;
sfr T4H = 0xd2;
sfr T3L = 0xd5;
sfr T3H = 0xd4;
sfr T2L = 0xd7;
sfr T2H = 0xd6;
sfr AUXR = 0x8e;
sfr IE2 = 0xaf;
#define ET2 0x04
#define ET3 0x20
#define ET4 0x40
sfr AUXINTIF =0xef;
#define T2IF 0x01
#define T3IF 0x02
#define T4IF 0x04
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sbit P10 = P1^0;
void TM3_Isr() interrupt 19
{
P10 = !P10; //测试端口
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
T3L = 0x66; //65536-11.0592M/12/1000
T3H = 0xfc;
T4T3M = 0x08; //启动定时器
IE2 = ET3; //使能定时器中断
EA = 1;
while (1);
}
神农鼎
发表于 2023-11-28 09:33:20
#define ET2 0x04
380091044
发表于 2023-11-28 10:15:06
神农鼎 发表于 2023-11-28 09:33
#define ET2 0x04
是ET3值等于0x20,把IE2的位5置1,不是ET2
_奶咖君_
发表于 2023-12-11 18:01:20
之前踩过这个 范例程序的坑,,太相信这个程序了,,后来在写用范例程序的时候,还是要过一边代码。这个范例程序作为测试还行,进入到生产的时候还是要多看看。
神农鼎
发表于 2023-12-11 20:22:18
cofmilk 发表于 2023-12-11 18:01
之前踩过这个 范例程序的坑,,太相信这个程序了,,后来在写用范例程序的时候,还是要过一边代码。这个范 ...
没用心看 ? 范例程序是对的,你踩啥坑了
_奶咖君_
发表于 2023-12-12 08:43:48
神农鼎 发表于 2023-12-11 20:22
没用心看 ? 范例程序是对的,你踩啥坑了
单独用肯定是对的啊
只不过如题。这样赋值在使用多个外设的时候不行。这个就是坑啊。
所以范例程序也就是用在对各种资源的测试上,用到项目生产上还是要多注意。
380091044
发表于 2023-12-12 10:05:38
cofmilk 发表于 2023-12-11 18:01
之前踩过这个 范例程序的坑,,太相信这个程序了,,后来在写用范例程序的时候,还是要过一边代码。这个范 ...
仔细看过,赋值形式没见过,
_奶咖君_
发表于 2023-12-12 10:26:47
380091044 发表于 2023-12-12 10:05
仔细看过,赋值形式没见过,
啊?哦,,咱们说的不是一个事情。。他这里只是一个宏定义了一个数,然后赋值给了这个寄存器。
但是我说的是,如果按照这样赋值 IE2=ET3;虽然可以保证允许T3中断,但同时这个寄存器上的其他位控制的中断则全不关闭。
后来就使用这种方式赋值IE2 |= ET3;