找回密码
 立即注册
查看: 126|回复: 5

范例程序RTC下载进去怎么不运行?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-30 09:09:16
已绑定手机

3

主题

2

回帖

25

积分

新手上路

积分
25
发表于 2025-2-12 14:24:49 | 显示全部楼层 |阅读模式
用stc8H1K08T与17T都是一样,上传了图片,上面有程序和串口打印,看起来没有运行while()

程序,芯片,文件

程序,芯片,文件
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-2-12 14:52:15 | 显示全部楼层
  1. #include <AI8H.H>
  2. #include <intrins.h>
  3. #include <absacc.h>
  4. #include <string.h>
  5. #include <stdarg.h>
  6. #include <stdio.h>
  7. #include <math.h>
  8. //#define                TR                                P33
  9. #define                FOSC                        24000000UL                                        //主时钟
  10. #define                BAUD                        9600UL                                                //波特率
  11. #define                TMRF                        200UL                                                //定时器频率
  12. #define                BRT                                (0x10000-(FOSC/BAUD+2)/4)        //波特率发生器值
  13. #define                TMR                                (0x10000-FOSC/TMRF/12)                //定时器值
  14. #define                T_Buf_Len                64                                                        //Uart1发送缓存长度
  15. #define                R_Buf_Len                64                                                        //Uart1接收缓存长度
  16. #define                Master_Addr                0x00                                                //Uart主机地址
  17. #define                Slave_Addr                0x01                                                //Uart从机地址
  18. #define                Broad_Addr                0xFF                                                //Uart广播地址
  19. //#define                R                                0                                                        //485接收
  20. //#define                T                                1                                                        //485发送
  21. unsigned char                RP;                                        //Uart1接收指针
  22. unsigned char                TP;                                        //Uart1发送指针
  23. unsigned char                Uart_R_Len;                        //Uart1接收长度
  24. unsigned char                Uart_T_Len;                        //Uart1发送长度
  25. unsigned char xdata        R_Buf[R_Buf_Len];        //Uart1接收缓存
  26. unsigned char xdata        T_Buf[T_Buf_Len];        //Uart1发送缓存
  27. bit RTC_1s_Flag;
  28. void Delay_ms(unsigned char ms)
  29. {
  30.         unsigned int i;
  31.         do
  32.         {
  33.                 i=FOSC/10000;
  34.                 while(--i);        //10T per loop
  35.         }
  36.         while(--ms);
  37. }
  38. void UART_Send(unsigned int x)
  39. {
  40.         while(Uart_T_Len);
  41.         TP=0;
  42.         Uart_T_Len=x;
  43.         TI=1;
  44. }
  45. void Uart_Printf(unsigned char *v,...)
  46. {
  47.         va_list ap;
  48.         va_start(ap,v);
  49.         while(Uart_T_Len);
  50.         UART_Send(vsprintf(T_Buf,v,ap));
  51.         va_end(ap);
  52. }
  53. //void UART_Return(unsigned char temp)
  54. //{
  55. //        memcpy(T_Buf,R_Buf,temp);
  56. //        UART_Send(temp);
  57. //}
  58. void Init(void)
  59. {
  60.         P_SW2|=EAXFR;
  61.        
  62.         P0M1=0x00;        P0M0=0x00;        //设置IO模式
  63.         P1M1=0xC0;        P1M0=0x00;        //设置IO模式
  64.         P2M1=0x00;        P2M0=0x00;        //设置IO模式
  65.         P3M1=0x00;        P3M0=0x00;        //设置IO模式
  66.         P4M1=0x00;        P4M0=0x00;        //设置IO模式
  67.         P5M1=0x00;        P5M0=0x00;        //设置IO模式
  68.         P6M1=0x00;        P6M0=0x00;        //设置IO模式
  69.         P7M1=0x00;        P7M0=0x00;        //设置IO模式
  70.        
  71.         X32KCR=0x80;                        //启动外部32.768KHz晶振
  72.         while(!(X32KCR&0x01));        //等待外部32.768KHz晶振稳定
  73.         RTCCFG=0x00;                        //RTC选择外部32.768KHz时钟源
  74.        
  75.         AUXR=0x05;                //设置定时器0时钟为12T模式,设置定时器2为1T模式,设置定时器2为波特率发生器
  76.         TMOD=0x01;                //设置定时器0为16位不自动重装载模式
  77.         TH0=TMR>>8;                //设置定时器0初始值
  78.         TL0=TMR;                //设置定时器0初始值
  79.         TF0=0;                        //清除TF0中断标志位
  80.         ET0=1;                        //启用定时器0中断
  81.        
  82.         SCON=0x50;                //设置UART1模式为8位数据可变波特率
  83.         T2H=BRT>>8;                //设置UART1波特率
  84.         T2L=BRT;                //设置UART1波特率
  85.         AUXR|=T2R;                //打开定时器2
  86.         ES=1;                        //启用UART1中断
  87.        
  88.         INIYEAR                =25;        //初始化年
  89.         INIMONTH        =1;                //初始化月
  90.         INIDAY                =1;                //初始化日
  91.         INIHOUR                =0;                //初始化时
  92.         INIMIN                =0;                //初始化分
  93.         INISEC                =0;                //初始化秒
  94.         INISSEC                =0;                //初始化1/128秒
  95.         INIWEEK                =3;                //初始化星期
  96.        
  97.         RTCCFG|=0x01;                //初始化RTC
  98.        
  99.         RTCIF=0x00;                //清除RTC中断标志
  100.         RTCIEN=0x08;        //启用RTC秒中断
  101.         RTCCR=0x01;                //打开RTC
  102.        
  103.         EA=1;                        //启用总中断
  104. }
  105. void main(void)
  106. {
  107.         Init();
  108.         while(1)
  109.         {
  110.                 if(RTC_1s_Flag)
  111.                 {
  112.                         RTC_1s_Flag=0;
  113.                         Uart_Printf("\r\n\r\n20%02bu/%02bu/%02bu 星期%bu %02bu:%02bu:%02bu\r\n",YEAR,MONTH,DAY,WEEK,HOUR,MIN,SEC);
  114.                 }
  115.                
  116.                 Delay_ms(250);
  117.                 Delay_ms(250);
  118.         }
  119. }
  120. void Uart_Start(void)
  121. {
  122.         TH0=TMR>>8;
  123.         TL0=TMR;
  124.         TR0=1;
  125. }
  126. void Uart_Stop(void)
  127. {
  128.         TR0=0;
  129.         TH0=TMR>>8;
  130.         TL0=TMR;
  131.         RP=0;
  132.         memset(R_Buf,0x00,sizeof R_Buf);
  133. }
  134. void TMR0_Isr(void) interrupt TMR0_VECTOR
  135. {
  136. //        UART_Return(RP);
  137.         Uart_Stop();
  138. }
  139. void UART1_Isr(void) interrupt UART1_VECTOR
  140. {
  141.         if(RI)
  142.         {
  143.                 RI=0;
  144.                 Uart_Start();
  145.                 R_Buf[RP]=SBUF;
  146.                 if(RP==0)
  147.                 {
  148.                         if(R_Buf[0]==Slave_Addr||R_Buf[0]==Broad_Addr)
  149.                         {
  150.                                
  151.                         }
  152.                         else
  153.                         {
  154.                                 Uart_Stop();
  155.                         }
  156.                 }
  157.                 else if(RP==1)
  158.                 {
  159.                         if(R_Buf[1]==0x0B)
  160.                         {
  161.                                 Uart_R_Len=R_Buf[1]+2;
  162.                         }
  163.                         else
  164.                         {
  165.                                 Uart_Stop();
  166.                         }
  167.                 }
  168.                 else if(RP==Uart_R_Len-1)
  169.                 {
  170.                         INIYEAR=        R_Buf[3];        //初始化年
  171.                         INIMONTH=        R_Buf[4];        //初始化月
  172.                         INIDAY=                R_Buf[5];        //初始化日
  173.                         INIHOUR=        R_Buf[7];        //初始化时
  174.                         INIMIN=                R_Buf[8];        //初始化分
  175.                         INISEC=                R_Buf[9];        //初始化秒
  176.                         INISSEC=        0;                        //初始化1/128秒
  177.                         INIWEEK=        R_Buf[6];        //初始化星期
  178.                         RTCCFG|=0x01;                        //初始化RTC
  179.                         Uart_Stop();
  180.                 }
  181.                 else if(RP==R_Buf_Len-1)
  182.                 {
  183.                         Uart_Stop();
  184.                 }
  185.                 if(TR0)
  186.                 {
  187.                         RP++;
  188.                 }
  189.         }
  190.         if(TI)
  191.         {
  192.                 TI=0;
  193.                 if(TP==Uart_T_Len)
  194.                 {
  195. //                        TR=R;
  196.                         TP=0;
  197.                         Uart_T_Len=0;
  198.                 }
  199.                 if(Uart_T_Len!=0)
  200.                 {
  201. //                        TR=T;
  202.                         SBUF=(T_Buf[TP]);
  203.                         TP++;
  204.                 }
  205.         }
  206. }
  207. void RTC_Isr(void) interrupt RTC_VECTOR
  208. {
  209. //        if(RTCIF&0x80)        //闹钟中断
  210. //        {
  211. //                RTCIF&=~0x80;
  212. //        }
  213. //        if(RTCIF&0x40)        //日中断
  214. //        {
  215. //                RTCIF&=~0x40;
  216. //        }
  217. //        if(RTCIF&0x20)        //时中断
  218. //        {
  219. //                RTCIF&=~0x20;
  220. //        }
  221. //        if(RTCIF&0x10)        //分中断
  222. //        {
  223. //                RTCIF&=~0x10;
  224. //        }
  225.         if(RTCIF&0x08)        //秒中断
  226.         {
  227.                 RTCIF&=~0x08;
  228.                 RTC_1s_Flag=1;
  229.         }
  230. //        if(RTCIF&0x04)        //1/2秒中断
  231. //        {
  232. //                RTCIF&=~0x04;
  233. //        }
  234. //        if(RTCIF&0x02)        //1/8秒中断
  235. //        {
  236. //                RTCIF&=~0x02;
  237. //        }
  238. //        if(RTCIF&0x01)        //1/32秒中断
  239. //        {
  240. //                RTCIF&=~0x01;
  241. //        }
  242. }
复制代码


DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-2-12 14:53:15 | 显示全部楼层
没有看到你的原理图
注意外接32768Hz晶振,晶振IO设置为高阻
初始化时打开外部32768Hz晶振并等待时钟稳定
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-30 09:09:16
已绑定手机

3

主题

2

回帖

25

积分

新手上路

积分
25
发表于 2025-2-12 14:59:31 | 显示全部楼层
Debu*** 发表于 2025-2-12 14:53
没有看到你的原理图
注意外接32768Hz晶振,晶振IO设置为高阻
初始化时打开外部32768Hz晶振并等待时钟稳定

官方程序没有改动,按照上面增加了文件

点评

非官方开发板,需提供原理图  详情 回复 发表于 2025-2-12 15:05
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-2-12 15:05:23 | 显示全部楼层
qq2863*** 发表于 2025-2-12 14:59
官方程序没有改动,按照上面增加了文件

非官方开发板,需提供原理图

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-30 09:09:16
已绑定手机

3

主题

2

回帖

25

积分

新手上路

积分
25
发表于 2025-2-12 15:14:08 | 显示全部楼层
Debu*** 发表于 2025-2-12 15:05
非官方开发板,需提供原理图


回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:24 , Processed in 0.135199 second(s), 81 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表