2年前在一玩灯的方案公司,画了好多的NY8A051一些板子,但一直没时间搞来玩程序,今天试着调试了一把,发布。
单片机源程序如下:
- /* =========================================================================
- * Project: PB0 External Interrupt
- * File: main.c
- * Author: JasonLee
- * Version: V1.0
- * Date: 2022/04/05
- =========================================================================*/
- #include <ny8.h>
- #include "ny8_constant.h"
- #define UPDATE_REG(x) __asm__("MOVR _" #x ",F")
- #define RESULT 1 //定义 RESULT 为 0
- void main(void)
- {
- PORTB = 0; //PORTB data buffer = 0 (output low)
- #if 1==RESULT //低电平触发
- IOSTB&=~(1<<0); //PB0设为输出模式
- PORTB |= (1<<0); //PB0输出高电平
- IOSTB&=~(1<<2); //PB2设为输出模式,点LED灯
- T0MD &=~(1<<6); //T0MD的第6位INTEDG=0,当PB0引脚发生下降沿时产生外部中断
- #else //高电平触发
- IOSTB&=~(1<<0); //PB0设为输出模式
- IOSTB&=~(1<<2); //PB2设为输出模式,点LED灯
- PORTB&=~(1<<0); //PB0默认是低电平
- T0MD |=(1<<6); //T0MD的第6位INTEDG=1,当PB0引脚发生上升沿时产生外部中断
- #endif
- PCON |= (1<<6); //EIS:外部中断选择位,EIS=1时,PB0是外部中断输入。
- PCON |= (1<<7); //WDTEN=1时开启WDT。
- INTE |= (1<<2); //INTIE:外部中断使能位,INTIE=1时开启外部中断。
-
- UPDATE_REG(PORTB);
- INTF = 0; // Clear all interrupt flags
- ENI(); // Enable all unmasked interrupts
-
- while(1)
- {
- CLRWDT();
- }
- }
- //! interrupt service routine
- void isr(void) __interrupt(0)
- {
- if(INTFbits.INTIF)
- {
- PORTBbits.PB2 ^=1; //PB2翻转
- INTFbits.INTIF=0;
- }
-
- }
复制代码
|