单片机芯片:STC32G12K128
晶振频率:24Mhz (STC-ISP)
STC-ISP版本:6.90D
收到STC32降龙棍后立即写了一个闪灯程序试机
单片机程序如下:
- #include <STC32G.H>
- //STC32G12K128: Code:128k Ram:4k xdata:8k EEProm:128k Addr:0x0000 T0/1/2/3/4
- typedef unsigned char u8; //0 to 255
- typedef unsigned int u16; //0 to 65535
- typedef unsigned long u32; //0 to 4294967295
- void Delay500ms() //@24.000MHz(STC-Y6)
- {
- unsigned char i, j, k;
- _nop_();
- _nop_();
- i = 61;
- j = 225;
- k = 62;
- do
- {
- do
- {
- while (--k);
- }
- while (--j);
- }
- while (--i);
- }
- void main()
- {
- P1M0 = 0;
- P1M1 = 0;
- while(1)
- {
- P1=~P1;
- Delay500ms();
- }
- }
复制代码
然而,下载完成后,led没有反应
等了很久(>5s),led才亮
又等了很久(>5s),led才灭
就怀疑是延时函数有问题
于是用以下函数替换
- void Delay500ms() //@24.000MHz(STC-Y1)
- {
- unsigned char i, j, k;
- _nop_();
- i = 8;
- j = 154;
- k = 122;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
复制代码
这样,闪烁的速度才差不多,但是还是不准
经过查手册和对比实验箱演示程序
才知道要设置以下寄存器才能全速运行
- WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
- EAXFR = 1; //扩展寄存器(XFR)访问使能
- CKCON = 0; //提高访问XRAM速度
复制代码
|