PDA

View Full Version : mạch đếm từ 00 dến 99 dùng PIC 16f877a


hunter800
17-03-2010, 07:03 PM
Em đang làm quen với PIC này.ai có mạch vs code đúng send cho em để em nghiên cứu
mong các sư huynh chỉ giáo.thanks!

trai_xq
18-03-2010, 08:06 AM
Em đang làm quen với PIC này.ai có mạch vs code đúng send cho em để em nghiên cứu
mong các sư huynh chỉ giáo.thanks!

đây là đoạn chương trình quét hai led 7 từ 0 đến 99 và reset lại. Nếu bạn chưa hiểu về sơ đồ thì có thể liên hệ với tôi qua phanthuongtbqn@gmail.com. Tôi sẽ giúp bạn.
#include <16f877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(d)
byte const ma7doan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
void hienthi(int so)
{
int hc,hdv;
hc=so/10;
hdv=so%10;
//hien thi so hang chuc
output_low(pin_a4);//cho chan a4 xuong muc thap--->>>qua transitor(PNP)--->>>>tich cuc led hang chuc
output_high(pin_a5);//cho chan a4 len muc cao--->>>qua transitor(PNP)--->>>>khoa led hang don vi
output_b(ma7doan[hc]);//hien thi so hangf chuc da chuyen doi BCD
delay_ms(100);//thay doi tuy theo ban chon thach anh
//hien thi so hang don vi
output_high(pin_a4);
output_low(pin_a5);
output_b(ma7doan[hdv]);
delay_ms(100);
}

void main()
{
int8 count=0;
int8 i;
set_tris_b(0x00);
//set_tris_a(0x00);
while(1)
{
for(i=0;i<2;i++)//vong for de lap hien thi, de tao thoi` gian tre
{
hienthi(count);
count++;
if(count==10) count=0; //reset lai
}
}
}

hunter800
18-03-2010, 05:22 PM
Bác nào có code vs mạch dùng ngắt timer up lên cho mình nghiên cứu với!Chưa biết nhiều về phần này!thanks

thuongcdtspkt
18-03-2010, 05:55 PM
chao huynh! minh moi lam quen voi Pic, chuong trinh minh dang hoc la MPLAB IDE C18. khong biet huynh co the chi dan them cho minh ve phan cung cua pic 18f4520, cach su dung MPLAB IDE C18 ko? Cam on!

trai_xq
18-03-2010, 10:49 PM
Bác nào có code vs mạch dùng ngắt timer up lên cho mình nghiên cứu với!Chưa biết nhiều về phần này!thanks

ngắt timer là loại ngắt mà khi nó xãy ra thì nó sẻ tự động tính thời gian, mà thời gian nó tính không phụ thuộc vào quá trình làm việc của VDK.
Cũng giống như ví dụ sau:
Trong một lớp học, khi mọi người chăm chú lắng nghe cô giáo giảng bài, thì bổng nhiên có một người có điện thoại, xem như cô giáo dạy và lớp học là VDk và công việc mà VDk phải làm, việc có một hs có điện thoại xem như ngắt timer xãy ra. Nghĩa là lớp học vẫn học bình thường khi anh hs đó ra nghe dt, không phụ thuộc vào anh ta. Bạn cứ hiểu nôm na là vậy.
Ngắt timer dùng để tạo thời gian, mà hoàn toàn khác với hàm delay, vì khi delay thì cả vdk đều dừng làm việc. Ngắt timer là vậy.

Về tài liệu bạn có thể tham khảo nhiều trên mạng, tôi có bài mẫu tôi mới viết về ngắt timer 0 hồi năm ngoái, bạn có thể tham khảo.

#include <16F877A.h>
#include <def_877a.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTB = 0x06

int16 dem=0;

//Chung trinh nhay led hao quang
void ht()
{int o;
for(o=1;o<=3;o++)
{
int8 out,i,j,a,n;
//while(1)
//{
a=0;
out=0;
output_d(out);
delay_ms(100);
for(i=0;i<=7;i=i+1)
{n=0x80;
for(j=0;j<=8-i;j=j+1)
{out=n|a;
output_d(out);
delay_ms(50);
n=n>>1;
}
a=a<<1;
a=a+1;
}
}
}


#int_timer0//ngat timer0 nhay led portc, khong duoc dung ham delay trong nay
void interrupt_timer0()
{ set_timer0(6);
++dem;
if(dem==0)
{
output_c(0x00);
}

if(dem==2000)
{
output_c(0b00000001);
}
else if(dem==4000)
{
output_c(0b00000011);
}
else if(dem==6000)
{
output_c(0b00000111);
}
else if(dem==8000)
{
output_c(0b00001111);
}
else if(dem==10000)
{
output_c(0b00011111);
}
else if(dem==12000)
{
output_c(0b00111111);
}
else if(dem==14000)
{
output_c(0b01111111);
}
else if(dem==16000)
{
output_c(0b11111111);
dem=0;
}


}

void main(void)
{ int k;
set_tris_b(0);
set_tris_c(0x00);
portc=0x00;
enable_interrupts(int_timer0);//cho phep ngat timer0
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); //khai bao timer0 bo dinh thoi, ty le chia tan 2
enable_interrupts(global);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
while(true)
{
ht();
}
}





Thân,

phu_cddt09a
29-10-2011, 08:58 PM
có bác nào viết điều khiển pic bằng hợp ngữ ko giúp em cái ct này với (đếm 0 lên 60)


PROCESSOR 16F877A
#INCLUDE <P16F877A.INC>
ORG 0000H
DEM2 EQU 25H
DEM EQU 20H
DEM1 EQU 23H
GIAY1 EQU 21H
GIAY2 EQU 22H
BCF STATUS,6
BSF STATUS,5
CLRF TRISB
BCF TRISA,0
BCF TRISA,1
BCF STATUS,5
MOVLW B'111111'
MOVWF PORTA
CLRF PORTB
MAIN
MOVLW D'0'
MOVWF GIAY1
MOVLW D'0'
MOVWF GIAY2
MOVLW D'0'
MOVWF DEM
HOATDONG
BSF PORTA,0
BCF PORTA,1
MOVF GIAY1
CALL BANG
MOVWF PORTB
CALL DELAY
BCF PORTA,0
BSF PORTA,1
MOVF GIAY2
CALL BANG
MOVWF PORTB
CALL DELAY
INCF DEM,1
MOVLW D'50'
XORWF DEM,0
BTFSS STATUS,2
GOTO HOATDONG
MOVLW D'9'
XORWF GIAY2,0
BTFSS STATUS,2
GOTO LENH1
GOTO LENH2
BANG
ADDWF PCL,1
RETLW B'11000000'
RETLW B'11111001'
RETLW B'10100100'
RETLW B'10110000'
RETLW B'10011001'
RETLW B'10010010'
RETLW B'10000010'
RETLW B'11111000'
RETLW B'10000000'
RETLW B'10010000'
LENH1
INCF GIAY2
GOTO HOATDONG
LENH2
MOVLW D'0'
MOVWF GIAY2
MOVLW D'6'
XORWF GIAY1,0
BTFSS STATUS,2
GOTO LENH3
GOTO MAIN
LENH3
INCF GIAY1
GOTO HOATDONG
DELAY
MOVLW D'50'
MOVWF DEM1
LOOP
DECFSZ DEM1
GOTO LOOP1
GOTO THOAT
LOOP1
MOVLW D'100'
MOVWF DEM2
LOOP2
DECFSZ DEM2
GOTO LOOP2
GOTO LOOP
THOAT
NOP
RETURN
END


em viết mà ko biết sai chỗ nào, bác nào pro giúp em tý nha

linhpro4981vip
09-11-2011, 11:37 PM
minh viet bang hop ngu tu o den 99 do,

ladykiller
20-11-2011, 02:02 AM
có bác nào viết điều khiển pic bằng hợp ngữ ko giúp em cái ct này với (đếm 0 lên 60)


PROCESSOR 16F877A
#INCLUDE <P16F877A.INC>
ORG 0000H
DEM2 EQU 25H
DEM EQU 20H
DEM1 EQU 23H
GIAY1 EQU 21H
GIAY2 EQU 22H
BCF STATUS,6
BSF STATUS,5
CLRF TRISB
BCF TRISA,0
BCF TRISA,1
BCF STATUS,5
MOVLW B'111111'
MOVWF PORTA
CLRF PORTB
MAIN
MOVLW D'0'
MOVWF GIAY1
MOVLW D'0'
MOVWF GIAY2
MOVLW D'0'
MOVWF DEM
HOATDONG
BSF PORTA,0
BCF PORTA,1
MOVF GIAY1
CALL BANG
MOVWF PORTB
CALL DELAY
BCF PORTA,0
BSF PORTA,1
MOVF GIAY2
CALL BANG
MOVWF PORTB
CALL DELAY
INCF DEM,1
MOVLW D'50'
XORWF DEM,0
BTFSS STATUS,2
GOTO HOATDONG
MOVLW D'9'
XORWF GIAY2,0
BTFSS STATUS,2
GOTO LENH1
GOTO LENH2
BANG
ADDWF PCL,1
RETLW B'11000000'
RETLW B'11111001'
RETLW B'10100100'
RETLW B'10110000'
RETLW B'10011001'
RETLW B'10010010'
RETLW B'10000010'
RETLW B'11111000'
RETLW B'10000000'
RETLW B'10010000'
LENH1
INCF GIAY2
GOTO HOATDONG
LENH2
MOVLW D'0'
MOVWF GIAY2
MOVLW D'6'
XORWF GIAY1,0
BTFSS STATUS,2
GOTO LENH3
GOTO MAIN
LENH3
INCF GIAY1
GOTO HOATDONG
DELAY
MOVLW D'50'
MOVWF DEM1
LOOP
DECFSZ DEM1
GOTO LOOP1
GOTO THOAT
LOOP1
MOVLW D'100'
MOVWF DEM2
LOOP2
DECFSZ DEM2
GOTO LOOP2
GOTO LOOP
THOAT
NOP
RETURN
END


em viết mà ko biết sai chỗ nào, bác nào pro giúp em tý nha

Tình hình là nhìn đoạn code em có thể đoán được bạn này học ở trường Cao Thắng :)
ah cái code mô phỏng chắc được còn nạp pic thì chưa chắc chạy vì bạn thiếu 1 dòng :
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
vui quá gặp được đồng minh ^^