PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Nhờ các anh so sánh đoạn code này ...! (http://www.picvietnam.com/forum/showthread.php?t=12542)

ElecTel 01-01-2012 01:46 PM

Nhờ các anh so sánh đoạn code này ...!
 
Đọc về kỹ thuật tạo ngắt ưu tiên của anh ChiBang bên điễn đàn điện tử em cũng tập tành viết đoạn code đọc xung encode nhưng có một vài điều thắc mắc ...
Trích:

Trong hàm ngắt, viết như sau:
Ngắt_1()
{
//Chèn mã lệnh: disable ngắt 1,2,3 tại đây
GIE=1;
//Chèn mã lệnh trình phục vụ ngắt 1
}

Ngắt_2()
{
//Chèn mã lệnh: disable ngắt 2,3 tại đây
GIE=1;
//Chèn mã lệnh trình phục vụ ngắt 2
}

Ngắt_3()
{
//Chèn mã lệnh: disable ngắt 3 tại đây
GIE=1;
//Chèn mã lệnh trình phục vụ ngắt 3
}
Em làm theo mẩu trên và đây là code
Code:

#include <16F877A.h>
#include <DEF_877A.h>
#device *=16 adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NOLVP
#use delay(clock=20000000)
//#define LCD_DATA_PORT getenv("SFR:PORTD") 
#define LCD_ENABLE_PIN  PIN_E0                                    ////
#define LCD_RS_PIN      PIN_E1                                    ////
#define LCD_RW_PIN      PIN_E2   
#define LCD_DATA4      PIN_D4                                    ////
#define LCD_DATA5      PIN_D5                                    ////
#define LCD_DATA6      PIN_D6                                    ////
#define LCD_DATA7      PIN_D7   
#include <lcd.c>


int16 h=0,chuc,tram,h1,donvi,k=0;
int16 count=0;
#int_RB
 void ngat_RB()
    { 
    disable_interrupts(int_rb);                        // tắt tất cả các ngắt
    disable_interrupts(int_timer0);
    GIE =1;
    if(RBIF)
      {
        if(RB0==1||RB0==0)                            // kiểm tra cạnh lên và xuống ..
        h++;                                                // đếm xung
        RBIF=0;
      }
    } 
#int_timer0
void ngat_timer0()
 {
  disable_interrupts(int_timer0);                  // tắt ngắt timer0
  GIE =1;
  if(tmr0if)
  {
    ++count;
    if(count==5000)
      {
        count=0;
        h1=h;
        k = h1+10;
        h=0;                                            // reset lại giá trị biến h 
       
        set_timer0(6);
        tmr0if=0;
      }
  }
 }
void main()
{
set_tris_b(0b11110001);
lcd_init();
delay_ms(100);



enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us

enable_interrupts(int_rb);
ext_int_edge(L_to_H);
enable_interrupts(global);
  while(1)
    {
    tram =h1/100;                                  // hiển thị gia trị của h1 và k lên LCD
    h1=h1%100;
    chuc=h1/10;
    donvi=h1%10;
    lcd_gotoxy(1,1);
    LCD_Putc(tram+0x30);
    LCD_Putc(chuc+0x30);
    LCD_Putc(donvi+0x30);
   
    tram =k/100;
    k=k%100;
    chuc=k/10;
    donvi=k%10;
    lcd_gotoxy(1,2);
    LCD_Putc(tram+0x30);
    LCD_Putc(chuc+0x30);
    LCD_Putc(donvi+0x30);

    }



}

Kết quả :
http://i1226.photobucket.com/albums/...990/multi3.jpg

Không có gì xảy ra hết .... ???? Các anh có thể cho em biết đoạn code trên sai chổ nào ko ??? mò mẩm từ sáng qua tới giờ ..... hixxx http://matcuoi.com/smilies/7smiley_vn8.jpg


Múi giờ GMT. Hiện tại là 08:21 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam