汇集网友智慧,解决技术难题
ST 单片机 08 学习 小白 stc8g
赞1
评论
2025-04-20
赞0
2025-04-25
2025-04-21
2025-04-19
点击图片添加到编辑器内容中
点击文件名将附件添加到文章中
提交
tyw
317个答案
天意无罪
287个答案
xch
221个答案
jjjyufan
202个答案
coody
198个答案
LcwSwust
162个答案
chunyang
135个答案
xionghaoyun
118个答案
赞1
评论
2025-04-20
赞0
评论
2025-04-25
赞0
sbit LED = P3^0; // 假设第7脚对应P3.0(需根据实际封装确认引脚映射)^[1][2]^
// 定时器初始化
void Timer0_Init() {
TMOD = 0x01; // 定时器0工作模式1(16位定时)
TH0 = 0xD8; // 初始值设置(11.0592MHz下50ms中断一次)^[11]^
TL0 = 0xF0;
ET0 = 1; // 允许定时器0中断
EA = 1; // 全局中断使能
TR0 = 1; // 启动定时器0
}
volatile unsigned int count = 0; // 中断计数
void main() {
P3M0 = 0x00; // 配置P3为准双向模式^[2][18]^
P3M1 = 0x00;
LED = 0; // 初始状态为亮
Timer0_Init();
while(1);
}
// 定时器0中断服务函数
void Timer0_ISR() interrupt 1 {
TH0 = 0xD8; // 重新加载初值
TL0 = 0xF0;
if (++count >= 60) { // 50ms*60=3秒
count = 0;
LED = ~LED; // 翻转LED状态
}
}
评论
2025-04-25
赞0
#include <STC8G.H>
sbit LED = P3^0; // 第7脚对应P3.0
void Delay3000ms() { // @11.0592MHz
unsigned int i, j;
for (i = 0; i < 3000; i++)
for (j = 0; j < 1000; j++);
}
void main() {
P3M0 = 0x00; // 准双向模式
P3M1 = 0x00;
LED = 0; // 初始亮
while(1) {
LED = ~LED; // 翻转状态
Delay3000ms();
}
}
评论
2025-04-25
赞1
但凡花点时间学习,都能很容易实现:
main:
将P3.2设设置为输出;
while(1)
{
P32 = ~P32;
延时3秒;
}
评论
2025-04-21
赞0
评论
2025-04-21
赞1
//========================================================================
// 头文件
//========================================================================
#include "type_def.h"
#include "STC8G.H"
#include <intrins.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//========================================================================
// 主时钟定义
//========================================================================
#define MAIN_Fosc 24000000L //定义主时钟
//定时器0做16位自动重装, 中断频率为1000HZ, 1ms
#define T0_1mS (65536UL - (MAIN_Fosc / 1000UL)) //初值
u8 ucT0_1MS=0; // 10ms计时
//========================================================================
// 函数: Timer0_ISR_Handler
// 描述: Timer0中断函数.
// 参数: none.
// 返回: none.
//========================================================================
void Timer0_ISR_Handler (void) interrupt 1 //进中断时已经清除标志
{ // 1ms
// TODO: 在此处添加用户代码
ucT0_1MS++; // 10ms计时
}
void main(void)
{
u8 uc1s=0;
// IO
P3_MODE_IO_PU(GPIO_Pin_1|GPIO_Pin_2); //P3.1,P3.2 设置为准双向口
// 定时器
AUXR=0xC0; // 设置为 1T模式
//定时器0做16位自动重装, 中断频率为1000HZ, 1ms
TMOD=0x00;
TL0=T0_1mS; // 初值
TH0=(T0_1mS)>>8; // 初值
TR0=1;
ET0=1;
EA = 1;
while(1)
{
if(ucT0_1MS>=10)
{
ucT0_1MS=0; // 10ms定时
uc1s++; // 1s 计时
}
if(uc1s>=100) // 1s
{
uc1s=0;
P31 =~P31; // 测试点
P32 = ~P32; // 此处为1s/次,请根据自己的需求修改
}
}
}
评论
2025-04-21
非常感谢!
赞1
评论
2025-04-21
赞0
另外先别急着闪,先让一个脚固定输出 1 或者 0,用万用表量一下,确认下载并运行成功。
评论
2025-04-19
您需要登录后才可以回复 登录 | 注册