AN1分别接外部中断4管脚(P3.0)和地,AN2分别接P3.1和地之间。上面的测试程序是按下AN1或者AN2,LED都会亮,实际上只有按下AN2灯会亮,按下AN1灯不亮,也就是没有进入中断。其他的外部中断也试了,也是没有进入中断。在15W系列上用都没有问题,8F系列第一次用,PDF好像也没看到需要特别注意的地方。搞了大半天了,也没看出来哪里问题。请求大佬们指点一下,不胜感激!
STC8F1K08S2 TSSOP-20封装
单片机源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sfr INTCLKO = 0x8F; // 外部中断
- sfr IE2 = 0xAF; //中断使能寄存器2
- sfr AUXR = 0x8E; //辅助寄存器
- sfr P5 = 0xC8; //xxxx,1111 端口5
- sbit LVP2=P1^0; //高电平开,低电平关
- sbit LVP3=P1^1; //高电平开,低电平关
- sbit SW3=P1^2; //拨码开关3
- sbit SW2=P1^3; //拨码开关2
- sbit SW1=P1^4; //拨码开关1
- sbit OCP3=P1^5; //高电平开,低电平关
- sbit OCP2=P1^6; //高电平开,低电平关
- sbit OCP1=P1^7; //高电平开,低电平关
- sbit AN1=P3^0; // AN1 启动/多功能按键
- sbit AN2=P3^1; // AN2 停止/多功能按键
- sbit OCP=P3^2; // 过流保护输入,正常高电平,过流低电平
- sbit OTP=P3^3; // 过温保护输入,正常高电平,过温低电平
- sbit CMPO=P3^4; //低压比较器输出:正常高电平,低压低电平
- sbit OY=P3^5; //功率回路开关
- sbit LVP1=P3^6; // 高电平开,低电平关
- sbit CMPN=P3^7; // 比较器正相输入
- sbit LED=P5^4; //LED指示灯 :1亮,0灭。
- sbit SVP=P5^5; // 节能控制,OP电源开关 :高电平开
- uchar num,calt1;
- void delayms(uint xms) //xms
- {
- uint i,j,m;
- for(i=xms;i>0;i--)
- for(j=50;j>0;j--) //10.1ms
- for(m=100;m>0;m--);
- }
- void init123() //初始化函数
- {
- TMOD=0x01; //设置定时器0为工作方式1(M1M0为0000 0001即01)
- TH0=(65536-50000)/256; //50ms
- TL0=(65536-50000)%256;
- TR0 = 1; //启动定时器0
- ET0 = 1; //打开定时器0
- //IT0=0; //外部中断0,1为跳变沿触发方式 ,0为低电平触发。
- //EX0=1; //开外部中断0
- IT1=0; //外部中断1,1为跳变沿触发方式 ,0为低电平触发。
- EX1=1; //开外部中断1
-
- //INTCLKO = 0x10; //EX2=1; // 打开外部中断2
- //INTCLKO = 0x20; //EX3=1; // 打开外部中断3
- INTCLKO = 0x40; //EX4=1; // 打开外部中断4
- //INTCLKO = 0x70; //234
-
- OY=0;
- LED=0;
- SVP=1;
- EA=1; //开总中断
- }
- void main()
- {
- init123();
- delayms(1);
- while(1)
- {
- if(AN2==0)
- {
- LED=1;
- }
- else
- {
- LED=0;
- num=0;
- }
- }
- }
- void INT1_time() interrupt 2 //外部中断1
- {
- LED=1;
- }
- void INT4_time() interrupt 16 //外部中断4 ,下降沿触发
- {
- LED=1;
- }
- void T0_time() interrupt 1 //T0
- {
- num++;
- }
复制代码
|