All pastes #266241 Raw Edit

Stuff

public text v1 · immutable
·published 2006-12-03 22:54 UTC
rendered paste body
/***************************************** start header *****************************************/
#include <12f683.h> 

#fuses INTRC_IO, NOWDT,NOMCLR,NOPUT 

#byte TRISIO = 0x85			// GPIO tri-state register 
#byte GPIO = 0x05 			// general purpose I/O register
#byte ANSEL = 0x9F 			// analog select register
#byte CMCON0 = 0x19 			// comparator configuration register
#byte IOC = 0x96			// interrupt on change register
#byte INTCON = 0x0B			// interrupt control register

#bit GP0 = GPIO.0			
#bit GP1 = GPIO.1		
#bit GP2 = GPIO.2						
#bit GP3 = GPIO.3
						
#bit SYNC = GPIO.4	
#bit SYNCDIR = TRISIO.4					
#bit TRX = GPIO.5
#bit TRXDIR = TRISIO.5

/***************************************** end header *****************************************/

/***************************************** start function prototypes *****************************************/
int get_byte();
void send_byte(int mybyte);
void delay(int times, int16 time);
/***************************************** end function prototypes *****************************************/

/***************************************** start main function *****************************************/
void main() {
	ANSEL = 0x00;		
	CMCON0 = 0x07; 		
	IOC = 0x00;		
	TRISIO = 0x00; 		
	INTCON = 0x00;

	while(1) {
	send_byte(6);
	}
}
/***************************************** end main function *****************************************/

/***************************************** start get_byte() function *****************************************/
int get_byte() {
	int a, mybyte;
	
	// setup 2wire comm direction
	SYNCDIR = 1;
	TRXDIR = 1;
	
	GP0 = 0x00;

	/* we wait for the start sequence */
	while(1) {
		a = 0x00;
		if(SYNC & TRX) { a = 0x01; }
		while(SYNC & a) {
			if(SYNC & !TRX) { a = 0x00; goto shiftin; }
		}		
	}	

	/* shift in bits MSB first (128 place) */
	shiftin:
	for(a=0;a!=8;a++) {
		while(!SYNC);
		if(SYNC) { mybyte = mybyte << 1; if(TRX) { mybyte = mybyte + 1; } }
		while(SYNC);
	}
	
	if(mybyte == 6) { GP0 ^= 0x01; delay(4,8000); }
	
	return 1;
}
/***************************************** end get_byte() function *****************************************/

/***************************************** start send_byte() function *****************************************/
void send_byte(int mybyte) {
	int i, a;
	
	// setup 2wire comm direction
	SYNCDIR = 0;
	TRXDIR = 0;	
	
	/* start sequence */
	SYNC = 0x01;
	TRX = 0x01;	
	delay(1,500);
	TRX = 0x00;
	SYNC = 0x00;
	delay(1,1000); 

	/* we start to send the eight bits MSB first (128 place) */
	a = 128;
	
	for(i = 8;i != 0;i--) {
		if(mybyte&a) { 
			TRX = 0x01; 
			SYNC = 0x01; 
			delay(1,500); 
			SYNC = 0x00;
		} else { 
			TRX = 0x00; 
			SYNC = 0x01;
			delay(1,500); 
			SYNC = 0x00; 
		}
		a /= 2;		
	}

	return;
}
/***************************************** end send_byte() function *****************************************/

/***************************************** start delay() function *****************************************/
void delay(int times, int16 time) {
	int16 i, a;
	for(a=0;a!=times;a++) { for(i=0;i!=time;i++); }
	return;
}
/***************************************** end delay() function *****************************************/