Tải bản đầy đủ (.pdf) (4 trang)

BÀI TẬP VỀ PIC 16F877 pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (65.71 KB, 4 trang )

[BÀI TẬP VỀ PIC 16F877]


1



1/ Chương trình dịch Led P2.7 – P2.0. CTC delay có thể tùy chỉnh, delay tối đa là 12,75s
ORG 0030H
MOV TMOD,#01H
MOV A,#80H
LAP:
MOV P2,A
CALL DELAY
RR A
SJMP LAP
DELAY:
MOV R7,0
LP: MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
SETB TR0
JNB TF0,$
INC R7
CLR TF0
CLR TR0
CJNE R7,#20,LP
RET
END

2.
#include "16F877A.H"


#use delay(clock=20000000)
#use Fast_IO(A)
#byte porta=0x05
#bit ra0=porta.0
int8 k;
#bit b0=k.0
#bit b1=k.1
#bit b2=k.2
unsigned mang1[]={0, 1, 2, 3, 4, 5, 6, 7};
unsigned mang2[]={0, 1, 3, 2, 6, 7, 5, 4};
void main()
{
set_tris_A(255);
int8 i;
while(1)
{
for(i=0;i<8;i++)
{
if (ra0==0)
k=mang1[i];
else
k=mang2[i];
output_bit(PIN_B0,b0);
[BÀI TẬP VỀ PIC 16F877]


2




output_bit(PIN_B1,b1);
output_bit(PIN_B2,b2);
delay_ms(200);
}
}
}
3. Thực hiện mạch logic

#include "16F877A.H"
#use delay(clock=20000000)
#use Fast_IO(A)
#byte porta=0x05
#bit ra0=porta.0
#bit ra1=porta.1
#bit ra2=porta.2
void main()
{
int1 a,b,c;
set_tris_a(0b000000111);
while(1)
{
a=~(((~ra0) | ra1) & (~ra2));
b=~((~ra2) & ra1);
c=~(a^b);
output_bit(PIN_A3,c);
}
}

4. Dịch Led 2 chiều !!!


#include "16F877A.H"
#use delay(clock=20000000)
#use Fast_IO(D)
#byte portd=0x08
void main()
{
int8 i,led=1;
set_tris_d(0);


[BÀI TẬP VỀ PIC 16F877]


3



while(1)
{
for(i=1;i<15;i++)
{
portd=led;
delay_ms(100);
if (i<8)
led=led<<1;
else
led=led>>1;
}
}
}

5. Tạo sóng có điều kiện đầu vào ở RB0
#include "16F877A.H"
#use delay(clock=20000000)
#use Fast_IO(B)
#byte portB=0x06
#bit RB0=portB.0
void main()
{
set_tris_B(0x00000001);
while(1)
{
if (RB0==0)
{
output_high(PIN_B6);
delay_us(125);
output_low(PIN_B6);
delay_us(125);
}
else
{
output_high(PIN_B7);
delay_ms(10);
output_low(PIN_B7);
delay_ms(10);
}
}
}


[BÀI TẬP VỀ PIC 16F877]



4



6. Đếm cạnh xuống, giải mã BCD cho vô 2 Led 7 đoạn xuất cùng 1 port

#include "16F877A.H"
#use delay(clock=20000000)
#use Fast_IO(B)
#byte portb=0x06
void main()
{
int8 count=0,a,b;
set_tris_B(0);
set_tris_A(1);
while(1)
{
b= ((count/10)<<4) + (count % 10);
portb=b;
while(!input(PIN_A0));
while(input(PIN_A0));
count=count+1;
if (count==100)
count=0;
}
}

** Thuật toán phát hiện cạnh xuống:

while(!input(PIN_A0));
while(input(PIN_A0));

** Thuật toán phát hiện cạnh lên:
while(input(PIN_A0));
while(!input(PIN_A0));

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×