em mới học pic ( 16f877) nên xin các bác giúp đỡ
chương trình như sau : có 4 cảm biến báo về tiến hiệu analoc ( a0 a1 a2 a3 ) ,
chuyển đổi adc 10bit , đặt các biến cb1 cb2 cb3 cb4 tuong đương theo thứ tự
nếu cb1 - cb2 > 2 thì PORTC=0B11111110 ;
nếu cb2 - cb1 > 2 thì PORTC=0B11111101 ;
nếu cb3 - cb4 > 2 thì PORTC=0B11111011 ;
nếu cb4 - cb3 1 > 2 thì PORTC=0B11110111 ; // số 2 là sai số cho phép
ngược lại thì PORTC=0B01111111 ; // sử dụng thạch anh 12m đi
không bít là sai chổ nào mà e thay chương trình chạy tào lao quá .
cort
#include <16F877a.h>
#include <def_877a.h>
#device *=16 adc=10
#use delay(clock=12000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=n,xmit=PIN_C6,rcv=PIN_C7,st op=1)
#include <STDDEF.h>
#include <math.h>
unsigned long cb1 , cb2 , cb3 , cb4;
TRISA = 0xff ;
TRISC = 0B00000000 ;
ADCON1 = 0x80 ;
ADCON0 = 0xC1 ;
void main()
{
while (1)
{
PORTC=0B11111111 ;
delay_ms(50) ;
cb1 = adc_read(0) ;
delay_ms(100) ;
cb2 = adc_read(1) ;
delay_ms(100) ;
cb3 = adc_read(2) ;
delay_ms(100) ;
cb4 = adc_read(3) ;
delay_ms(1000) ;
if (( cb1 - cb2 ) > 2) goto dc2qnghich ;
if (( cb2 - cb1 ) > 2) goto dc2qthuan ;
if (( cb3 - cb4 ) > 2) goto dc1qnghich ;
if (( cb4 - cb3 ) > 2) goto dc1qthuan ;
goto phatlaze ;
}
dc2qnghich :
PORTC=0B11111111;
delay_ms(50) ;
cb1 = adc_read(0) ;
delay_ms(100) ;
cb2 = adc_read(1) ;
delay_ms(100) ;
if (( cb1 - cb2 ) > 2)
{
PORTC=0B11111110 ;
delay_ms(1000) ;
goto dc2qnghich ;
}
goto phatlaze ;
dc2qthuan :
PORTC=0B11111111;
delay_ms(3000) ;
cb1 = adc_read(0) ;
delay_ms(100) ;
cb2 = adc_read(1) ;
delay_ms(100) ;
if (( cb2 - cb1 ) > 2)
{
PORTC=0B11111101 ;
delay_ms(3000) ;
goto dc2qthuan ;
}
goto phatlaze ;
dc1qthuan :
PORTC=0B11111111;
delay_ms(3000) ;
cb3 = adc_read(2) ;
delay_ms(100) ;
cb4 = adc_read(3) ;
delay_ms(100) ;
if (( cb4 - cb3 ) > 2)
{
PORTC=0B11110111 ;
delay_ms(3000) ;
goto dc1qthuan ;
}
goto phatlaze ;
dc1qnghich :
PORTC=0B11111111;
delay_ms(3000) ;
cb3 = adc_read(2) ;
delay_ms(100) ;
cb4 = adc_read(3) ;
delay_ms(100) ;
if (( cb3 - cb4 ) > 2)
{
PORTC=0B11111011;
delay_ms(3000) ;
goto dc1qnghich ;
}
goto phatlaze ;
phatlaze :
PORTC=0B11111111;
delay_ms(3000) ;
while (1)
{
cb1 = adc_read(0) ;
delay_ms(100) ;
cb2 = adc_read(1) ;
delay_ms(100) ;
cb3 = adc_read(2) ;
delay_ms(100) ;
cb4 = adc_read(3) ;
delay_ms(100) ;
if (( cb1 - cb2 ) > 2) goto dc2qnghich ;
if (( cb2 - cb1 ) > 2) goto dc2qthuan ;
if (( cb3 - cb4 ) > 2) goto dc1qnghich ;
if (( cb4 - cb3 ) > 2) goto dc1qthuan ;
PORTC=0B01111111 ;
delay_ms(3000) ;
}
}
}
chương trình như sau : có 4 cảm biến báo về tiến hiệu analoc ( a0 a1 a2 a3 ) ,
chuyển đổi adc 10bit , đặt các biến cb1 cb2 cb3 cb4 tuong đương theo thứ tự
nếu cb1 - cb2 > 2 thì PORTC=0B11111110 ;
nếu cb2 - cb1 > 2 thì PORTC=0B11111101 ;
nếu cb3 - cb4 > 2 thì PORTC=0B11111011 ;
nếu cb4 - cb3 1 > 2 thì PORTC=0B11110111 ; // số 2 là sai số cho phép
ngược lại thì PORTC=0B01111111 ; // sử dụng thạch anh 12m đi
không bít là sai chổ nào mà e thay chương trình chạy tào lao quá .
cort
#include <16F877a.h>
#include <def_877a.h>
#device *=16 adc=10
#use delay(clock=12000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=n,xmit=PIN_C6,rcv=PIN_C7,st op=1)
#include <STDDEF.h>
#include <math.h>
unsigned long cb1 , cb2 , cb3 , cb4;
TRISA = 0xff ;
TRISC = 0B00000000 ;
ADCON1 = 0x80 ;
ADCON0 = 0xC1 ;
void main()
{
while (1)
{
PORTC=0B11111111 ;
delay_ms(50) ;
cb1 = adc_read(0) ;
delay_ms(100) ;
cb2 = adc_read(1) ;
delay_ms(100) ;
cb3 = adc_read(2) ;
delay_ms(100) ;
cb4 = adc_read(3) ;
delay_ms(1000) ;
if (( cb1 - cb2 ) > 2) goto dc2qnghich ;
if (( cb2 - cb1 ) > 2) goto dc2qthuan ;
if (( cb3 - cb4 ) > 2) goto dc1qnghich ;
if (( cb4 - cb3 ) > 2) goto dc1qthuan ;
goto phatlaze ;
}
dc2qnghich :
PORTC=0B11111111;
delay_ms(50) ;
cb1 = adc_read(0) ;
delay_ms(100) ;
cb2 = adc_read(1) ;
delay_ms(100) ;
if (( cb1 - cb2 ) > 2)
{
PORTC=0B11111110 ;
delay_ms(1000) ;
goto dc2qnghich ;
}
goto phatlaze ;
dc2qthuan :
PORTC=0B11111111;
delay_ms(3000) ;
cb1 = adc_read(0) ;
delay_ms(100) ;
cb2 = adc_read(1) ;
delay_ms(100) ;
if (( cb2 - cb1 ) > 2)
{
PORTC=0B11111101 ;
delay_ms(3000) ;
goto dc2qthuan ;
}
goto phatlaze ;
dc1qthuan :
PORTC=0B11111111;
delay_ms(3000) ;
cb3 = adc_read(2) ;
delay_ms(100) ;
cb4 = adc_read(3) ;
delay_ms(100) ;
if (( cb4 - cb3 ) > 2)
{
PORTC=0B11110111 ;
delay_ms(3000) ;
goto dc1qthuan ;
}
goto phatlaze ;
dc1qnghich :
PORTC=0B11111111;
delay_ms(3000) ;
cb3 = adc_read(2) ;
delay_ms(100) ;
cb4 = adc_read(3) ;
delay_ms(100) ;
if (( cb3 - cb4 ) > 2)
{
PORTC=0B11111011;
delay_ms(3000) ;
goto dc1qnghich ;
}
goto phatlaze ;
phatlaze :
PORTC=0B11111111;
delay_ms(3000) ;
while (1)
{
cb1 = adc_read(0) ;
delay_ms(100) ;
cb2 = adc_read(1) ;
delay_ms(100) ;
cb3 = adc_read(2) ;
delay_ms(100) ;
cb4 = adc_read(3) ;
delay_ms(100) ;
if (( cb1 - cb2 ) > 2) goto dc2qnghich ;
if (( cb2 - cb1 ) > 2) goto dc2qthuan ;
if (( cb3 - cb4 ) > 2) goto dc1qnghich ;
if (( cb4 - cb3 ) > 2) goto dc1qthuan ;
PORTC=0B01111111 ;
delay_ms(3000) ;
}
}
}
Comment