找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 694|回复: 4
收起左侧

AI写的程序:FMD FT60E21X SOP8 单片机定时器0应用

[复制链接]
ID:59341 发表于 2025-10-22 08:43 | 显示全部楼层 |阅读模式
//AI写的定时器0应用:PA4接一个LED(低电平亮,高电平灭),1秒亮1秒灭,这样循环。看看代码有没有问

#include "SYSCFG.h"
#include "FT60F21X.h"

// 宏定义:LED引脚(PA4)及中断计数变量
#define LED_PIN     PA4
unsigned char timer0_cnt = 0;  // Timer0溢出计数(16ms/次)
bit led_flag = 0;              // LED状态标志(0:灭,1:亮)

/*-------------------------------------------------
* 函数名:interrupt ISR
* 功能:中断处理(Timer0溢出中断)
* 说明:每16ms进入一次中断,计数62次后翻转LED状态
--------------------------------------------------*/
void interrupt ISR(void)
{
    if (INTCON & 0x04)  // 检查Timer0溢出标志(T0IF=1)
    {
        timer0_cnt++;    // 溢出次数累加
        if (timer0_cnt >= 62)  // 62次×16ms≈1秒
        {
            timer0_cnt = 0;    // 计数清零
            led_flag = ~led_flag;  // 翻转LED状态标志
            LED_PIN = led_flag;    // 更新PA4电平(低电平亮)
        }
        INTCON &= ~(1 << 2);  // 清除T0IF中断标志
        TMR0 = 0;             // 重置Timer0计数初值
    }
}

/*----------------------------------------------------
* 函数名:TIMER0_INITIAL
* 功能:Timer0初始化
* 定时计算:(1/8MHz)×4(指令周期)×128(预分频)×255≈16ms
----------------------------------------------------*/
void TIMER0_INITIAL(void)
{
    T0ON = 0;             // 关闭Timer0(配置期间)
    TMR0 = 0;             // 计数初值清零
    T0CON0 = 0x00;        // 时钟源选择指令周期,禁止Timer0(后续手动使能)
    OPTION = 0x06;        // 配置预分频:1:128(PS2-PS0=110),分频器分配给Timer0(PSA=0)
    T0ON = 1;             // 使能Timer0
}

/*-------------------------------------------------
* 函数名:POWER_INITIAL
* 功能:系统上电初始化(时钟、IO口、中断)
--------------------------------------------------*/
void POWER_INITIAL(void)
{
    // 1. 系统时钟配置:内部8MHz(IRCF=110)
    OSCCON = 0x60;        // IRCF[6:4]=110 → HIRC=8MHz
    while (!(OSCCON & 0x04));  // 等待HIRC稳定(HTS=1)

    // 2. IO口配置:PA4为输出,初始高电平(LED灭)
    TRISA &= ~(1 << 4);   // PA4方向:输出(TRISA[4]=0)
    PSRCA &= ~(0x03);     // PA4源电流:3mA(PSRCA[1:0]=00)
    PSINKA &= ~(0x01);    // PA4灌电流:最小(PSINKA[0]=0)
    LED_PIN = 1;          // 初始状态:PA4高电平(LED灭)

    // 3. 中断初始化:禁止所有中断(后续手动开启所需中断)
    INTCON = 0x00;
    WPUA = 0x00;          // 关闭PA口上拉(LED为输出,无需上拉)
}

/*-------------------------------------------------
* 函数名:main
* 功能:主函数(初始化+死循环)
--------------------------------------------------*/
void main()
{
    POWER_INITIAL();      // 系统初始化(时钟、IO口)
    TIMER0_INITIAL();     // Timer0初始化(16ms溢出)

    // 开启中断:全局中断(GIE)+ Timer0中断(T0IE)
    GIE = 1;
    T0IE = 1;

    // 死循环:等待中断触发(无需额外操作)
    while (1)
    {
        NOP();
    }
}

大伙看看代码有没有问题,写得规范吗?
回复

使用道具 举报

ID:67199 发表于 2025-10-23 11:53 | 显示全部楼层
用AI写个PIC的代码,个人感觉,整体架构还行,不同芯片的差异等细节问题还处理不好,有待加强,需人工逐一审定修改。
回复

使用道具 举报

ID:584814 发表于 2025-10-24 17:31 | 显示全部楼层
AI写的代码微型全套或可直接用,多可参考。
回复

使用道具 举报

ID:71233 发表于 2025-10-24 22:31 | 显示全部楼层
上述代码可以正常运行吗?
回复

使用道具 举报

ID:59341 发表于 2025-11-4 17:59 | 显示全部楼层
lmn2005 发表于 2025-10-24 22:31
上述代码可以正常运行吗?

运行OK
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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