|
|
发表于 2026-8-19 10:58:38
|
显示全部楼层
发现一个问题:下面这个程序去掉这行“#define DELAY_MS 500 // 闪烁延时(毫秒),可自行调整”,编译不会报错,看汇编发现没有赋值。
/******************************************************************************
* 文件名 : LED_Test.c
* 功能 : STC32G12K128 点亮一个LED测试程序
* 编译 : Keil C251
*
* 用法说明:
* 1. 请将 LED 的正极(经限流电阻)接至 P2.0,负极接 GND(低电平点亮),
* 或按您的硬件实际接线调整 P20 引脚。
* 2. 若 LED 是共阳接法(高电平点亮),请将程序中的 P20 = ~P20 改为
* P20 = !P20,并相应理解电平逻辑。
* 3. 使用 Keil C251 新建工程,添加本文件,选择 STC32G12K128 型号
* 编译下载即可。LED 将周期性亮灭闪烁。
******************************************************************************/
#include "STC32G.h"
/* ============ 用户可配置参数 ============ */
#define LED_PIN P20 // LED 接在 P2.0 引脚
#define DELAY_MS 500 // 闪烁延时(毫秒),可自行调整
/* ============ 延时函数(软件粗略延时) ============ */
/* 注意:本延时基于内部HIRC(默认11.0592MHz左右)粗略估算,
如需精确延时建议改用定时器。 */
void delay_ms(unsigned int ms)
{
unsigned int i, j;
for (i = 0; i < ms; i++)
{
for (j = 0; j < 1000; j++);
}
}
/* ============ 主函数 ============ */
void main(void)
{
/* 使能访问XFR(扩展寄存器),手册建议上电置1后不再修改 */
EAXFR = 1;
/* 设置程序代码等待参数为最快 */
WTST = 0x00;
/* 设置外部数据总线速度为最快 */
CKCON = 0x00;
/* ======= 配置P2.0为推挽输出 ======= */
/* 推挽输出:PnM1.x = 0, PnM0.x = 1 */
P2M1 &= ~0x01; // P2.0: P2M1.0 = 0
P2M0 |= 0x01; // P2.0: P2M0.0 = 1
while (1)
{
/* 点亮LED(P2.0 输出低电平) */
LED_PIN = 0;
delay_ms(DELAY_MS);
/* 熄灭LED(P2.0 输出高电平) */
LED_PIN = 1;
delay_ms(DELAY_MS);
}
}
|
|