#include <pic.h>#include <htc.h> // Required to interface with delay routines#ifndef _XTAL_FREQ // Unless already defined assume 4MHz system frequency // This definition is required to calibrate __delay_us() and __delay_ms() #define _XTAL_FREQ 4000000#endif__CONFIG(XT & WDTDIS & PWRTDIS & UNPROTECT); #define TURN_LEFT 0b00000010#define TURN_RIGHT 0b00001000#define MOVE_FORWARD 0b00001010#define MOVE_BACKWARD 0b00000101void init (void){ TRISA = 0xF0; TRISB = 0xE7; PORTB = 0xE7;}void PWM1 (void){ RB3 = 1; RB4 = 1; __delay_ms(100); RB3 = 0; RB4 = 0; __delay_ms(150);}void main (void){ unsigned char sensor; unsigned char prev_command = 0x01; init(); while(1) { PWM1(); sensor = (PORTB & 0x07); switch(sensor) { case 0x00: //000 - move forward PORTA = MOVE_BACKWARD; prev_command = MOVE_BACKWARD; break; case 0x01: //001 PORTA = TURN_RIGHT; prev_command = TURN_RIGHT; break; case 0x02: //010 PORTA = MOVE_FORWARD; prev_command = MOVE_FORWARD; break; case 0x03: //011 PORTA = TURN_RIGHT; prev_command = TURN_RIGHT; break; case 0x04: //100 PORTA = TURN_LEFT; prev_command = TURN_LEFT; break; case 0x05: //101 PORTA = prev_command; break; case 0x06: //110 PORTA = TURN_LEFT; prev_command = TURN_LEFT; break; case 0x07: //111 PORTA = MOVE_BACKWARD; break; default: PORTA = prev_command; break; } }}
16F84A lang yan