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

Bài tập bộ môn Thực tập Vi xử lý (có lời giải) Phần 3 DH SPKT TPHCM

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 (1.07 MB, 22 trang )

Bộ môn Thực tập vi xử lý
Trường đại học Sư Phạm Kỹ Thuật thành phố Hồ Chí Minh
Một số bài tập vi xử lý có lời giải
Phần 3
(Lưu ý: Code được trình bày từ trên xuống dưới và từ trái qua phải)
Chú ý: Vì trong bài tập mình sử dụng thư viện khác nên mọi người
nếu chưa có hãy cài thư viện để tiện sử dụng nhé.
Các bước tạo một thư viện của riêng mình:
B1: Tạo một file mới trong CCS C Compiler với tên và code như bên
dưới .

B2: Mọi người lưu lại và thêm vào thư mục PICC/Devices nơi các bạn
lưu phần mềm CCS C Compiler.


Thư viện sử dụng trong bài tập.
Thư viện TV_16F887.C
Code:
#INCLUDE <16F887.H>
#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP
#USE DELAY(CLOCK = 20M)
CONST UNSIGNED CHAR MA7DOANCA[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
0x6F};
CONST UNSIGNED CHAR MA7DOANAN[16] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0XC6,0xA1,0x86,0x8E};

Thư viện TVLCD.C
Code:
#ifndef _LCD_
#define _LCD_
#define LCD_RS PIN_D1


#define LCD_RW PIN_D2
#define LCD_EN PIN_D3
#define LCD_D4 PIN_D4
#define LCD_D5 PIN_D5
#define LCD_D6 PIN_D6
#define LCD_D7 PIN_D7
#endif

LCD_SendCommand( 0x28 ); // giao thuc 4 bit,
hien thi 2 hang, ki tu 5 8
//Function Set: 8-bit, 1 Line, 5 7
Dots 0x30
//Function Set: 8-bit, 2 Line, 5 7
Dots 0x38
//Function Set: 4-bit, 1 Line, 5 7
Dots 0x20
//Function Set: 4-bit, 2 Line, 5 7
Dots 0x28


void LCD_Enable(void)
{
output_high(LCD_EN);
delay_us(3);
output_low(LCD_EN);
delay_us(50);
}
void LCD_Send4Bit( unsigned char Data )
{
output_bit(LCD_D4,Data&0x01);

output_bit(LCD_D5,(Data>>1)&1);
output_bit(LCD_D6,(Data>>2)&1);
output_bit(LCD_D7,(Data>>3)&1);
}
void LCD_SendCommand (unsigned char command )
{
LCD_Send4Bit ( command >>4 );// Gui 4 bit cao
LCD_Enable () ;
LCD_Send4Bit ( command ); // Gui 4 bit thap
LCD_Enable () ;
}
void LCD_Init (void)
{
output_low(LCD_RS);
output_low(LCD_RW);
delay_ms(20);
LCD_Send4Bit(0x03);
LCD_Enable();
delay_ms(10);
LCD_Send4Bit(0x03);
LCD_Enable();
delay_ms(10);
LCD_Send4Bit(0x03);
LCD_Enable();
delay_ms(10);
LCD_Send4Bit(0x02);
LCD_Enable();
delay_ms(10);

LCD_SendCommand( 0x0C); //Display on Cursor

on: 0x0E 0x0F
//Display on Cursor off: 0x0C
//Display on Cursor blinking: 0x0F
LCD_SendCommand( 0x06 ); // tang ID, khong dich
khung hinh Entry Mode
LCD_SendCommand( 0x01 ); // Clear Display (also
clear DDRAM content)
delay_ms(10);
}
void LCD_PutC ( unsigned char Data )
{
output_high(LCD_RS);
LCD_SendCommand( Data );
output_low(LCD_RS);
}
void LCD_Clear()
{
LCD_SendCommand(0x01);
delay_ms(10);
}
void LCD_Gotoxy(unsigned char row, unsigned char
col)
{
unsigned char address;
if(!row)
address = (0x80 + col);
else
address = (0xC0 + col);
delay_us(500);
LCD_SendCommand(address);

delay_us(50);
}


Bài 1: Viết chương trình theo yêu cầu sau :
− Nhấn RB0 hiển thị giá trị điện áp ở chân AN3 lên LCD, đồng thời gởi lên
Terminal.
− Nhấn RB1 hiển thị giá trị điện áp ở chân AN4 lên LCD, đồng thời gởi lên
Terminal.
− Nhấn RB2 hiển thị giá trị điện áp ở chân AN5 lên LCD, đồng thời gởi lên
Terminal.
Yêu cầu: Đọc trạng thái nút nhấn sử dụng ngõ vào I/O Port, lcd kết nối với
PORTD (từ RD1 tới RD7), UART tốc độ baud 9600.


Code:
#INCLUDE <16F887.H>
#device ADC=10
#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP
#USE DELAY(CLOCK = 20M)
#INCLUDE <TVLCD.C>
#USE rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
UNSIGNED INT16 CA3,CA5,CE0;
UNSIGNED INT8 RDATA=0,VITRI_H2=0;
UNSIGNED INT8 d,e,f;
UNSIGNED INT1 TTB0,TTB1,TTB2;
float a,b,c;
void khoitao_ADC0()
{
setup_adc_ports(sAN3);//thiet lap

setup_adc(ADC_CLOCK_DIV_2);
set_adc_channel(3); //chon kenh 0
delay_us(100);//on dinh
}
void khoitao_ADC1()
{
setup_adc_ports(sAN4);//thiet lap
setup_adc(ADC_CLOCK_DIV_2);
set_adc_channel(4); //chon kenh 1
delay_us(100);//on dinh
}
void khoitao_ADC2()
{
setup_adc_ports(sAN5);//thiet lap
setup_adc(ADC_CLOCK_DIV_2);
set_adc_channel(5); //chon kenh 2
delay_us(100);//on dinh
}
VOID VRB0()
{
IF(!INPUT(PIN_B0))
{
DELAY_MS(10);
IF(!INPUT(PIN_B0))
{
DELAY_MS(10);
TTB0=~TTB0;
TTB1 = 0;
TTB2 = 0;
}

}
}
VOID VRB1()
{
IF(!INPUT(PIN_B1))
{
DELAY_MS(10);
IF(!INPUT(PIN_B1))
{
DELAY_MS(10);

#INT_RDA
void interrupt_UART()
{
LCD_Gotoxy(1,VITRI_H2);
DELAY_US(10);
RDATA = GETCH();
LCD_PutC(RDATA);
IF (VITRI_H2==15)
{VITRI_H2=0;LCD_Clear(); DELAY_MS(2);}
ELSE VITRI_H2++;
}
VOID MAIN()
{
SET_TRIS_D(0x00);
SET_TRIS_B(0x00);
SETUP_ADC(ADC_CLOCK_INTERNAL);
LCD_Init();
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(INT_RDA);

TTB0 = 0;
TTB1 = 0;
TTB2 = 0;
d=0;
e=0;
f=0;
WHILE(TRUE)
{
khoitao_ADC0();
DELAY_MS(10);
CA3 = read_adc();
khoitao_ADC1();
DELAY_MS(10);
CA5 = read_adc();
khoitao_ADC2();
DELAY_MS(10);
CE0 = read_adc();
VRB0();
VRB1();
VRB2();
IF(TTB0 == 1)
{
d=1;
e=0;
f=0;
}
IF(TTB1 == 1)
{
d=0;
e=1;

f=0;
}
IF(TTB2 == 1)
{
d=0;


TTB1=~TTB1;
TTB0 = 0;
TTB2 = 0;

e=0;
f=1;
}
if(d == 1)
{
a = CA3/204.6;
LCD_GOTOXY(0,1);
PRINTF(LCD_PUTC,"%04LU",CA3);
LCD_GOTOXY(0,6);
PRINTF(LCD_PUTC,"%2.2f V",a);
DELAY_US(10);
printf("%f V\r",a);
TTB1 = 0;
TTB2 = 0;
VRB0();
VRB1();
VRB2();
}
if(e == 1)

{
b = CA5/204.6;
LCD_GOTOXY(0,1);
PRINTF(LCD_PUTC,"%04LU",CA5);
LCD_GOTOXY(0,6);
PRINTF(LCD_PUTC,"%2.2f V",b);
putc(CA5);
printf("%f V\r",b);
TTB2 = 0;
TTB0 = 0;
VRB0();
VRB1();
VRB2();
}
if(f == 1)
{
c = CE0/204.6;
LCD_GOTOXY(0,1);
PRINTF(LCD_PUTC,"%04LU",CE0);
LCD_GOTOXY(0,6);
PRINTF(LCD_PUTC,"%2.2f V",c);
printf("%f V\r",c);
TTB1 = 0;
TTB0 = 0;
VRB0();
VRB1();
VRB2();
}

}

}
}
VOID VRB2()
{
IF(!INPUT(PIN_B2))
{
DELAY_MS(10);
IF(!INPUT(PIN_B2))
{
DELAY_MS(10);
TTB2=~TTB2;
TTB1 = 0;
TTB0 = 0;
}
}
}

}
}


Bài 2: Viết chương trình theo yêu cầu sau:
− Nhấn giữ RB0 gởi lên máy tính giá trị tăng dần từ 00 đến 99, bắt đầu từ 00, mỗi
lần tăng 1 đơn vị, thời gian mỗi lần tăng là 0.5(s) .
− Nhấn giữ RB1 gởi lên máy tính giá trị giảm dần từ 99 về 00, bắt đầu từ 99, mỗi
lần giảm 1 đơn vị, thời gian mỗi lần giảm là 0.5(s).
Yêu cầu: Sử dụng UART 9600 để gởi lên máy tính, sử dụng hàm delay để định
thời khoảng thời gian 0.5(s).

Code:

#INCLUDE <TV_16F887.C>
#INCLUDE <TVLCD.C>
#USE rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
unsigned int16 dem;
VOID VRB0()
{
IF(!INPUT(PIN_B0))
{
DELAY_MS(10);
IF(!INPUT(PIN_B0))
{
DELAY_MS(10);
while(!INPUT(PIN_B0))
{
if(dem < 99)
{

VOID VRB1()
{
IF(!INPUT(PIN_B1))
{
DELAY_MS(10);
IF(!INPUT(PIN_B1))
{
DELAY_MS(10);
while(!INPUT(PIN_B1))
{
if(dem > 0)
{
dem--;

delay_ms(500);
}
lcd_gotoxy(1,1);


dem++;
delay_ms(500);
}
lcd_gotoxy(1,1);
lcd_putc((dem/10) + 0x30);
lcd_putc((dem%10) + 0x30);
printf("dem = %ld\r",dem); // \r la xuong
dong
}
}
}
}

lcd_putc((dem/10) + 0x30);
lcd_putc((dem%10) + 0x30);
printf("dem = %ld\r",dem); // \r la xuong
dong
}
}
}
}
VOID MAIN()
{
SET_TRIS_E(0x00); SET_TRIS_D(0x00);
LCD_Init();

dem = 0;
WHILE(TRUE)
{
VRB1();
VRB0();
}
}


Bài 3: Viết chương trình theo yêu cầu sau:
− Gởi từ máy tính xuống vi điều khiển kí tự “A” thì tạo xung PWM 50% ở chân
CCP1, chân CCP2 sẽ ở mức thấp (0V), đồng thời led RE1 sáng, RE2 tắt .
− Gởi từ máy tính xuống vi điều khiển kí tự “B” thì tạo xung PWM 70% ở chân
CCP2, chân CCP1 sẽ ở mức thấp (0V), RE1 tắt, RE2 sáng .
Yêu cầu: UART baud rate 9600, PWM 8 bit có tần số 15Khz.



Code:
#INCLUDE <TV_16F887.C>
#INCLUDE <TVLCD.C>
#USE rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
UNSIGNED INT8 RDATA=0;
unsigned int16 c1,c2; //captocdo1,captocdo2
VOID MAIN()
{
SET_TRIS_E(0x00); SET_TRIS_D(0x00);
LCD_Init();
SET_TRIS_C(0xC0);
setup_ccp1(ccp_pwm);

setup_timer_2(t2_div_by_16,20,1);
c1 = 0;
set_pwm1_duty(c1);

IF (RDATA == 'A')
{
putc('A') ; // goi duoc nhieu ki tu
//dieu khien den
output_high(pin_E1);
output_low(pin_E2);

setup_ccp2(ccp_pwm);
setup_timer_2(t2_div_by_16,20,1);
c2 = 0;
set_pwm2_duty(c2);
while(true)
{
IF (KBHIT() == 1) // co data
{
RDATA = GETC ();

else if(RDATA == 'B')
{
putc('B');
// dieu khien den
output_high(pin_E2);
output_low(pin_E1);

//dieu khien pwm
c1= 40;

set_pwm1_duty(c1);
c2= 0;
set_pwm2_duty(c2);
}

// dieu khien pwm
c1= 0;
set_pwm1_duty(c1);
c2= 56;
set_pwm2_duty(c2);
}
else putc ('@') ; // chi goi dc 1 ki tu
}
}
}


Bài 4: Viết chương trình theo yêu cầu sau:
− Nhấn nút RB0 thì gởi chuỗi “RB0 button” lên máy tính.
− Nhấn nút RB1 thì gởi chuỗi “RB1 button”lên máy tính.
− Nhấn nút RB2 thì gởi chuỗi “RB2 button” lên máy tính.
− Nhấn nút RB3 thì gởi chuỗi “RB3 button” lên máy tính.
− Nhấn nút RB4 thì gởi chuỗi “RB4 button” lên máy tính.
− Nhấn nút RB5 thì gởi chuỗi “RB5 button” lên máy tính.
− Nhấn nút RB6 thì gởi chuỗi “RB6 button” lên máy tính.
− Nhấn nút RB7 thì gởi chuỗi “RB7 button” lên máy tính.
Yêu cầu : UART baud rate 9600.


Code:

#INCLUDE <TV_16F887.C>
#INCLUDE <TVLCD.C>
#USE rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
unsigned int16 dem;
VOID VRB0()
{
IF(!INPUT(PIN_B0))
{
DELAY_MS(10);
IF(!INPUT(PIN_B0))
{
DELAY_MS(10);
while(!INPUT(PIN_B0)) {}
printf("RB0 button \r");
LCD_GOTOXY(0,1);
PRINTF(LCD_PUTC,"RB0");
}
}
}
VOID VRB1()
{
IF(!INPUT(PIN_B1))
{
DELAY_MS(10);
IF(!INPUT(PIN_B1))
{
DELAY_MS(10);
while(!INPUT(PIN_B1)) {}
printf("RB1 button \r");
}

}
}
VOID VRB2()
{
IF(!INPUT(PIN_B2))
{
DELAY_MS(10);
IF(!INPUT(PIN_B2))
{
DELAY_MS(10);
while(!INPUT(PIN_B2)) {}
printf("RB2 button \r");
}
}
}
VOID VRB3()
{
IF(!INPUT(PIN_B3))
{
DELAY_MS(10);
IF(!INPUT(PIN_B3))
{
DELAY_MS(10);
while(!INPUT(PIN_B3)) {}

VOID VRB4()
{
IF(!INPUT(PIN_B4))
{
DELAY_MS(10);

IF(!INPUT(PIN_B4))
{
DELAY_MS(10);
while(!INPUT(PIN_B4)) {}
printf("RB4 button \r");
}
}
}
VOID VRB5()
{
IF(!INPUT(PIN_B5))
{
DELAY_MS(10);
IF(!INPUT(PIN_B5))
{
DELAY_MS(10);
while(!INPUT(PIN_B5)) {}
printf("RB5 button \r");
}
}
}
VOID VRB6()
{
IF(!INPUT(PIN_B6))
{
DELAY_MS(10);
IF(!INPUT(PIN_B6))
{
DELAY_MS(10);
while(!INPUT(PIN_B6)) {}

printf("RB6 button \r");
}
}
}
VOID VRB7()
{
IF(!INPUT(PIN_B7))
{
DELAY_MS(10);
IF(!INPUT(PIN_B7))
{
DELAY_MS(10);
while(!INPUT(PIN_B7)) {}
printf("RB7 button \r");
}
}
}
VOID MAIN()
{


printf("RB3 button \r");
}
}
}

SET_TRIS_E(0x00); SET_TRIS_D(0x00);
LCD_Init();
dem = 0;
WHILE(TRUE)

{
VRB0();
VRB1();
VRB2();
VRB3();
VRB4();
VRB5();
VRB6();
VRB7();
}
}


Bài 5: Viết chương trình theo yêu cầu sau:
− Điếm số lần nhấn nút ở chân T0CKI, và hiển thị lên terminal của máy tính , khi
số lần nhấn bằng 50 thì gởi chuỗi “Full ” lên máy tính, đồng thời chớp tắt led ở cả
PORTD với chu kỳ T=2s.
Yêu cầu: UART baud rate 9600, sử dụng chức năng counter của timer 0 để đếm
sản phẩm, sử dụng hàm delay để định thời chu kỳ T=2s.


Code:
#INCLUDE <TV_16F887.C>
#INCLUDE <TVLCD.C>
#bit tmr0if = 0x0b.2
#USE rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
unsigned int16 T0 = 0;
unsigned int dem;
unsigned int8 solannhan = 0;
void nutnhan()

{
if(!input(pin_A4))
{
delay_ms(20);
if(!input(pin_A4))
{
while(!input(pin_A4)) {}
T0 = get_timer0();
printf("%ld\r\n",T0);

void main()
{
set_tris_A(0xff);
set_tris_D(0x00);
set_tris_C(0x00);
output_D(0x00);
setup_timer_0(t0_ext_L_to_H|t0_div_1);
set_timer0(0);
solannhan = 0;
while(true)
{
if(solannhan < 50)
{
nutnhan();
}
if(dem < 1)
{
if(T0 == 50)
{
printf("FULL\r\n");

dem++;
}
}
if(T0 == 50)
{
output_d(0xff);
delay_ms(1000);
output_d(0x00);
delay_ms(1000);
}

}
}
}

}
}


Bài 6: Điếm số lần nhấn nút ở chân T1CKI, và hiển thị lên terminal của máy tính,
khi số lần nhấn bằng 10 thì đọc giá trị ADC ở chân AN3 hiển thị kết quả điện áp
đọc được lên terminal.
Yêu cầu: UART baud rate 9600 , sử dụng chức năng counter của timer 1 để đếm
nút nhấn, sử dụng hàm delay để định thời chu kỷ T=2s, ADC 10 bit , điện áp tham
chiếu trong.

Code:
#INCLUDE <16F887.H>
#device ADC=10
#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP

#USE DELAY(CLOCK = 20M)
#INCLUDE <TVLCD.C>
#BIT TMR1IF = 0x0C.0
#USE rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
unsigned int16 T1 = 0,x;
unsigned int dem;
UNSIGNED INT16 CA3;
float a;
void nutnhan()
{
if(!input(pin_C0))
{
delay_ms(20);
if(!input(pin_C0))
{
delay_ms(20);

void main()
{
SET_TRIS_B(0x00);
SET_TRIS_D(0x00);
SETUP_TIMER_1(T1_INTERNAL |
T1_DIV_BY_1 );
SET_TIMER1(0);
T1 = 0;
x=0;
lcd_init();
while(true)
{
nutnhan();

if(dem < 1)
{
if(x == 10)
{
khoitao_ADC0();
DELAY_MS(10);


while(!input(pin_C0)) {}
T1 = get_timer1();
x++;
printf("%ld\r\n",x);

CA3 = read_adc();
a = CA3/204.6;
LCD_GOTOXY(0,1);
PRINTF(LCD_PUTC,"%04LU",CA3);
LCD_GOTOXY(0,6);
PRINTF(LCD_PUTC,"%2.2f V",a);
DELAY_US(10);
printf(" %f V\r",a);
dem++;
x=0;

}
}
}
void khoitao_ADC0()
{
setup_adc_ports(sAN3);//thiet lap

setup_adc(ADC_CLOCK_DIV_2);
set_adc_channel(3); //chon kenh 0
delay_us(100);//on dinh
}

}
}
}
}


Bài 7: Viết chương trình thực hiện theo yêu cầu sau:
− Gởi từ máy tính xuống VĐK kí tự “A”, đọc ADC ở chân AN2, hiển thị điện áp
lên LCD .
− Gởi từ máy tính xuống VĐK kí tự “B”, đọc ADC ở chân AN3, hiển thị điện áp
lên LCD .
− Gởi từ máy tính xuống VĐK kí tự “C”, đọc ADC ở chân AN4, hiển thị điện áp
lên LCD .
Yêu cầu : UART baud rate 9600 , ADC 10-bit.


Code:
#INCLUDE <16F887.H>
#device ADC=10
#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP
#USE DELAY(CLOCK = 20M)
#INCLUDE <TVLCD.C>
#USE rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
UNSIGNED INT16 CA3,CA5,CA2;
UNSIGNED INT8 RDATA=0,VITRI_H2=0;

float a,b,c;
void khoitao_ADC0()
{
setup_adc_ports(sAN3);//thiet lap
setup_adc(ADC_CLOCK_DIV_2);
set_adc_channel(3); //chon kenh 0
delay_us(100);//on dinh
}
void khoitao_ADC1()
{
setup_adc_ports(sAN4);//thiet lap
setup_adc(ADC_CLOCK_DIV_2);
set_adc_channel(4); //chon kenh 1
delay_us(100);//on dinh
}
void khoitao_ADC2()
{
setup_adc_ports(sAN2);//thiet lap
setup_adc(ADC_CLOCK_DIV_2);
set_adc_channel(2); //chon kenh 2
delay_us(100);//on dinh
}
VOID MAIN()
{
SET_TRIS_E(0x00); SET_TRIS_D(0x00);
LCD_Init();
SET_TRIS_C(0xC0);

while(true)
{

IF (KBHIT() == 1) // co data
{
RDATA = GETC ();
IF (RDATA == 'A')
{
putc('A') ;
khoitao_ADC2();
DELAY_MS(10);
CA2 = read_adc();
a = CA2/204.6;
LCD_GOTOXY(0,1);
PRINTF(LCD_PUTC,"%04LU",CA2);
LCD_GOTOXY(0,6);
PRINTF(LCD_PUTC,"%2.2f V",a);
DELAY_US(10);
printf("%f V\r",a);
}
else if(RDATA == 'B')
{
putc('B');
khoitao_ADC0();
DELAY_MS(10);
CA3 = read_adc();
b = CA3/204.6;
LCD_GOTOXY(0,1);
PRINTF(LCD_PUTC,"%04LU",CA3);
LCD_GOTOXY(0,6);
PRINTF(LCD_PUTC,"%2.2f V",b);
DELAY_US(10);
printf("%f V\r",b);

}
else if(RDATA == 'C')
{
putc('C');
khoitao_ADC0();
DELAY_MS(10);
CA5 = read_adc();
c = CA5/204.6;
LCD_GOTOXY(0,1);
PRINTF(LCD_PUTC,"%04LU",CA5);
LCD_GOTOXY(0,6);
PRINTF(LCD_PUTC,"%2.2f V",c);
DELAY_US(10);
printf("%f V\r",c);
}
else putc ('@') ; // chi goi dc 1 ki tu
}
}
}


Bài 8: Viết chương trình thực hiện theo yêu cầu sau:
− Viết chương trình đếm số lần nhấn nút ở chân RB0 hiển thị lên lcd , số lần nhấn
nút ở chân RB1 hiển thị lên máy tính .
Yêu cầu : UART baud rate 9600.

Code:
#INCLUDE <TV_16F887.C>
#INCLUDE <TVLCD.C>
#bit tmr0if = 0x0b.2

#BIT TMR1IF = 0x0C.0
#USE rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
unsigned int16 T0 = 0,y=0;
unsigned int16 T1 = 0,x=0;
void VRB0()
{
if(!input(pin_B0))
{
delay_ms(20);
if(!input(pin_B0))
{
while(!input(pin_B0)) {}
T0 = get_timer0();
y++;
LCD_GOTOXY(1,1);
PRINTF(LCD_PUTC,"%04LU",y);
}
}


}
void VRB1()
{
if(!input(pin_B1))
{
delay_ms(20);
if(!input(pin_B1))
{
while(!input(pin_B1)) {}
T1 = get_timer1();

x++;
printf("%ld\r\n",x);
}
}
}
VOID MAIN()
{
set_tris_A(0xff);
set_tris_D(0x00);
set_tris_C(0x00);
setup_timer_0(t0_ext_L_to_H|t0_div_1);
set_timer0(0);
SETUP_TIMER_1(T1_INTERNAL |
T1_DIV_BY_1 );
SET_TIMER1(0);
LCD_Init();
WHILE(TRUE)
{
VRB0();
VRB1();
}
}



×