151
1841
2166
金牌会员
#include "stc8h.h" #include "intrins.h" #include "eeprom.h" #include <stdio.h> #define MAIN_Fosc 11059200UL #define BRT (65536 - MAIN_Fosc / 115200 / 4) //#define add 0x0E00 typedef unsigned char u8; typedef unsigned int u16; u8 state; u8 show,cnt; u8 dat; u16 EEPROMId = 0XE00; bit key_flag; //void delayms(u16 ms); void sys_init(); void PWM_init(void); //void Timer0_Init(void); void UartInit() { SCON = 0x5a; T2L = BRT; T2H = BRT >> 8; AUXR = 0x15; } void UartSend(char dat) { while (!TI); TI = 0; SBUF = dat; } void main() { sys_init(); UartInit(); IapIdle(); dat = IapRead(EEPROMId+1); if(dat == 0XFF) { dat = IapRead(EEPROMId); } else { EEPROMId++; } if(EEPROMId >= 0XFFD)//如果当前字节到达EEPROM末尾,擦除扇区所有数据 { // SetMode(CMD_ERASE); //扇区擦除 IapErase(0x0e00); //擦除扇区 } UartSend(IapRead(dat)); UartSend(IapRead(EEPROMId)); PWMA_CCR1 = state; // if(temp != 0xFF) number = temp; while(1) { switch(state) { case 0 : IapProgram(EEPROMId+1,state); PWMA_CCR1 = 5; break; case 1 : IapProgram(EEPROMId+1,state); PWMA_CCR1 = 15; break; case 2 : IapProgram(EEPROMId+1,state); PWMA_CCR1 = 55; break; case 3 : IapProgram(EEPROMId+1,state); PWMA_CCR1 = 250; break; default:break; } } } void sys_init(void) { P_SW2=0x80; P3M0 = 0x00; P3M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; PWM_init(); // Timer0_Init(); IT0=1;EX0=1; INTCLKO|=0x40; //EX4=1; 允许INT4外部中断 // IP2H=0x00; IP2=0x10; EA=1; //打开总中断 } //// 初始化PWM功能 void PWM_init(void) { PWMA_CCER1 = 0x00; // 写CCMRx前必须先清零CCERx关闭通道 PWMA_CCMR1 = 0x60; // 设置CC1为PWMA输出模式 PWMA_PS = 0x00; // PWMA_CCER1 = 0x03; // 使能CC4通道双极 PWMA_CCR1 = 0; // 初始化CCR4计数值为0 PWMA_ARR = 256; // 设置周期时间为12000个计数周期 PWMA_ENO = 0x01; // 使能PWM4P+N端口输出 PWMA_PSCR = 0; // PWM时钟预分频寄存器设置为0 PWMA_BKR = 0x80; // 使能主输出 PWMA_CR1 = 0x01; // 开始计时 } //void Timer0_Isr(void) interrupt 1 //{ // flag=1; //} //void Timer0_Init(void) //1毫秒@11.0592MHz //{ // AUXR |= 0x80; //定时器时钟1T模式 // TMOD &= 0xF0; //设置定时器模式 // TMOD |= 0x01; //设置定时器模式 // TL0 = 0xCD; //设置定时初始值 // TH0 = 0xD4; //设置定时初始值 // TF0 = 0; //清除TF0标志 // TR0 = 1; //定时器0开始计时 // ET0 = 1; //使能定时器0中断 //} void INT4_Isr(void) interrupt 16 { IAP_CONTR=0x60; } void INT0_Isr(void) interrupt 0 { } void delayms(u16 ms) {u16 i; do{ i = MAIN_Fosc /10000; while(--i); } while(--ms); } 复制代码
复制代码
使用道具 举报 送花
wnag*** 发表于 2024-8-3 16:54 我刚才看到库函数有EEPROM的操作函数,要是你的EEPROM.c不能用,在官网下载库函数用呗,先把EEPROM的读写擦 ...
wnag*** 发表于 2024-8-3 17:10 就这么几行代码你要是还看不明白,我真没办法了
wnag*** 发表于 2024-8-3 17:20 报错截图来看看
wnag*** 发表于 2024-8-3 17:29 报错截图,我要看截图
wnag*** 发表于 2024-8-3 17:34 驾校教练?佩服
wnag*** 发表于 2024-8-3 19:54 好好看视频学习一下吧 https://www.stcaimcu.com/forum.php?mod=viewthread&tid=323
wnagming 发表于 2024-8-3 20:02 u8 dat 和u16 eepromid这两个尽量放在函数内,全局变量不宜太多,用函数返回值做数据就好 ...
wnag*** 发表于 2024-8-4 17:09 后面就不用写了,time
void Timer0_Isr(void) interrupt 1 { TL0 = 0xCD; //设置定时初始值 TH0 = 0xD4; //设置定时初始值 if(time<200) { switch(dat) { case 254: IapProgram(EEPROMId+1,1);break; case 1: IapProgram(EEPROMId+1,15);break; case 15: IapProgram(EEPROMId+1,55);break; default: IapProgram(EEPROMId+1,254);break; } } else { } if(time<200) time++; } 复制代码
62
833
1625
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-8-24 05:57 , Processed in 0.132584 second(s), 103 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.