本帖最后由 zhouminjie 于 2021-4-21 08:26 编辑
收到板子快半个月了,之前没接触过AVR单片机,趁着节假日学习下AVR,开始点灯
①下载安装MPLAB X IDE开发环境,安装XC8编译工具,安装MPLAB代码配置器MCC
打开MPLAB
②新建工程File—>New Project...
③选择Microchip Embedded—>Standalone Projects—>Next
④Device选择AVR128DB48、Tool选择AVR128DB48 Curiosity Nano
⑤编译工具选择XC8
⑥设置工程名,存储路径,Encoding设置GB18030(中文注释就不会显示为乱码)
⑦Tools—>Embedded—>MCC,打开代码配置器
⑧配置System Module,Oscillator Frequency Options设置16MHz system clock
⑨配置Pin Module,右击Pin Manager: Package View中芯片引脚PB3,设置为GPIO output
⑩添加TCA0定时器外设,使能定时器TCA0,Clock Selection设置System Clock/16,使能溢出中断
⑪配置Interrupt Manager,使能全局中断
⑫配置完成后,点击Generate生成main.c,在main.c中增加LED代码,定时器设置为10us中断一次,呼吸频率200Hz,5ms(500*10us)
- #include "mcc_generated_files/mcc.h"
- uint16_t PWMCount = 0;
- uint16_t BreathingCount = 0;
- uint16_t PWMDutyCount = 1;
- uint8_t Direction = 0;
- /*
- Main application
- */
- void Breathing_cb(void)
- {
- TCA0_ClearOverflowInterruptFlag();
- TCA0_WriteTimer(0);
- PWMCount++;
- BreathingCount++;
- if(PWMCount == PWMDutyCount)
- {
- LED_SetHigh();
- }
- if(PWMCount >= 350)
- {
- LED_SetLow();
- PWMCount = 0;
- }
- if(BreathingCount >= 500 && Direction == 0)
- {
- BreathingCount = 0;
- PWMDutyCount++;
- if(PWMDutyCount >= 349)
- {
- Direction = 1;
- }
- }
- if(BreathingCount >= 500 && Direction == 1)
- {
- BreathingCount = 0;
- PWMDutyCount--;
- if(PWMDutyCount == 1)
- {
- Direction = 0;
- }
- }
- }
- int main(void)
- {
- /* Initializes MCU, drivers and middleware */
- SYSTEM_Initialize();
-
- LED_SetDigitalOutput();
- LED_SetHigh(); //LED熄灭
- TCA0.SINGLE.PER = 10; //10us定时中断一次
- TCA0_WriteTimer(0);
- TCA0.SINGLE.INTCTRL = 1 << TCA_SINGLE_OVF_bp;
- TCA0_SetOVFIsrCallback(Breathing_cb);
-
- while (1){
- }
- }
⑬效果如下:
测试源码:
|