每次翻贴都能解疑答惑得到收获,前段时间想读掉电唤醒定时器时钟频率,搞了好久没能成功今天在这里找到了答案再试就成功了,膜拜!
只是不知道什么原因、烧录代码后打开串口助手收不到数据,改成循环发送就好了。
使用官网例程,主函数中添加加了两句代码转贴这里方便大家测试:
- //程序为STC官网例程
- //本芯片读出内部掉电时钟频率:8C 6E
- #include "stc8h.h"
- #include "intrins.h"
-
- #define FOSC 11059200UL
- #define BRT (65536 - FOSC / 115200 / 4)
-
- #define CPUIDBASE 0xfde0
- #define F32K_ADDR (*(unsigned int volatile xdata *)(CPUIDBASE + 0x09))
-
- bit busy;
- //------------------------------
- void UartIsr() interrupt 4
- {
- if (TI)
- {
- TI = 0;
- busy = 0;
- }
- if (RI)
- {
- RI = 0;
- }
- }
- //------------------------------
- void UartInit()
- {
- SCON = 0x50;
- TMOD = 0x00;
- TL1 = BRT;
- TH1 = BRT >> 8;
- TR1 = 1;
- AUXR = 0x40;
- busy = 0;
- }
- //-----------------------------
- void UartSend(char dat)
- {
- while (busy);
- busy = 1;
- SBUF = dat;
- }
- //-----------------------------
- void Delay500ms(void) //@11.0592MHz
- {
- unsigned char data i, j, k;
-
- i = 29;
- j = 14;
- k = 54;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- //----------------------------------
- void main()
- {
- P_SW2 |= 0x80; //使能访问XFR
-
- P0M0 = 0x00;
- P0M1 = 0x00;
- P1M0 = 0x00;
- P1M1 = 0x00;
- P2M0 = 0x00;
- P2M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P4M0 = 0x00;
- P4M1 = 0x00;
- P5M0 = 0x00;
- P5M1 = 0x00;
-
- UartInit();
- ES = 1;
- EA = 1;
- while (1)
- {
- UartSend(F32K_ADDR >> 8); //读取32K频率的高字节
- UartSend(F32K_ADDR); //读取32K频率的低字节
- UartSend(0XAA);//加一个数据结尾标志
- Delay500ms();//延时便于查看串口接收的数据
- }
- }
复制代码
|