![]() |
![]() |
#6 |
Đệ tử 1 túi
Tham gia ngày: Jul 2011
Bài gửi: 25
: |
Code:
#include <16F877A.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #device 16F877*=16 ADC=10 #use delay(clock=12000000) #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 #byte intcon=0x000B #bit RBIF=intcon.0 #bit RBIE=intcon.3 Int16 ad1,ad2,ad0; int8 a,a0,a1,a2,b0,b1,b2,c0,c1,c2 ; const unsigned char digital[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x09} ; #int_rb void ngatrb7() { a=a+1; RBIF=0 ; } void doc_ADC() { if(a%2==0) { set_ADC_channel(0); ad0=read_ADC(); delay_us(10) ; set_ADC_channel(1); ad1=read_ADC(); delay_us(10) ; set_adc_channel(2); ad2=read_ADC() ; delay_us(10) ; } else { set_ADC_channel(3); ad0=read_ADC(); delay_us(10) ; set_ADC_channel(4); ad1=read_ADC(); delay_us(10) ; set_adc_channel(5); ad2=read_ADC() ; delay_us(10) ; } } void main() { set_tris_d(0) ; set_tris_b(0b11110000); set_tris_c(0); setup_ADC(ADC_clock_internal); setup_adc_ports(ALL_ANALOG); enable_interrupts(global); enable_interrupts(int_rb); ext_int_edge(h_to_l); while(true) { doc_ADC() ; ////hien chu so hang tram // delay_ms(10) ; portb=0x01 ; c0=ad0/100 ; portd=digital[c0] ; portb=0x02 ; c1=ad1/100 ; portd=digital[c1] ; portb=0x04 ; c2=ad2/100 ; portd=digital[c2]; portc=0x01 ; delay_ms(2) ; portc=0x00 ; ///chu hang chuc portb=0x01; b0=(ad0%100)/10 ; portd=digital[b0] ; portb=0x02; b1=(ad1%100)/10 ; portd=digital[b1] ; portb=0x04 ; b2=(ad2%100)/10 ; portd=digital[b2] ; portc=0x02 ; delay_ms(2) ; portc=0x00 ; ////chu hang don vi portb=0x01 ; a0=(ad0%10)%10 ; portd=digital[a0] ; portb=0x02 ; a1=(ad1%10)%10 ; portd=digital[a1] ; portb=0x04 ; a2=(ad2%10)%10 ; portd=digital[a2]; portc=0x04; delay_ms(2) ; portc=0x00 ; } } nhưng khi nó đang chạy nhấn rb7 1 cái thì nó dính vào ngắt luôn hay sao ấy(Chỉ còn 1 cột đèn và không có đọc trên ADC) mình đã cho RBIF =0 khi thoát khỏi ngắt mà vẫn không được. -Với lại lúc mình set_tris_b(0b100000000) thì không phải là chỉ ngắt trên rb7 hay sao mấy chi rb4 đến rb5 mình set là output mà. |
![]() |
![]() |
|
|