AN1分別接外部中斷4管腳(P3.0)和地,AN2分別接P3.1和地之間。上面的測試程序是按下AN1或者AN2,LED都會亮,實際上只有按下AN2燈會亮,按下AN1燈不亮,也就是沒有進入中斷。其他的外部中斷也試了,也是沒有進入中斷。在15W系列上用都沒有問題,8F系列第一次用,PDF好像也沒看到需要特別注意的地方。搞了大半天了,也沒看出來哪里問題。請求大佬們指點一下,不勝感激!
STC8F1K08S2 TSSOP-20封裝
Capture.PNG (74.21 KB, 下載次數: 66)
下載附件
2019-12-6 12:21 上傳
單片機源程序如下:
- #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++;
- }
復制代碼
|