//globale variabelen unsigned char counter; void interrupt_extern(void) { if (test_bit(intcon,1)) { if(test_bit(portb,0)) counter++; while(test_bit(portb,0)); delay_ms(10); clear_bit(intcon,1); } if (test_bit(intcon3,0)) { if(test_bit(portb,1)) counter--; while(test_bit(portb,1)); delay_ms(10); clear_bit(intcon3,0); } } void init_rs232(void) { trisc = 0b11000000; baudcon = 0; spbrg = 77; txsta = 0; txsta = txsta | 32; rcsta = 144; } void baudratekeuze(unsigned int baudrate) { trisc=0b11000000; baudcon=0; switch (baudrate) { case 4800: spbrg = 155; break; case 9600: spbrg = 77; break; case 19200: spbrg = 38; break; case 38400: spbrg = 18; break; } txsta = 0; txsta = txsta | 32; rcsta = 144; } void baudratekeuze_extra(unsigned int baudrate) { trisc=0b11000000; baudcon=0; switch (baudrate) { case 4800: spbrg = 155; txsta=0; break; case 9600: spbrg = 77; txsta=0; break; case 19200: spbrg = 38; txsta=0; break; case 38400: spbrg = 77; txsta=4; break; } txsta = txsta | 32; rcsta = 144; } unsigned char lees_rs232(void) { while (!(pir1 & 32)); return rcreg; } void schrijf_rs232(unsigned char data) { while ((pir1 & 16)==0); txreg = data; } void lichtledop(unsigned char nummer) { portb=0; set_bit(portb,nummer-48); } void printf_rs232(unsigned char text2print[]) { unsigned char teller = 0; while (text2print[teller]) { schrijf_rs232(text2print[teller]); teller++; } } void schermnummer_rs232(unsigned char teller) { unsigned char x, temp; temp=teller; x=teller/100; if (temp>=100) schrijf_rs232(x+48); teller=teller-(x*100); x=teller/10; if (temp>=10) schrijf_rs232(x+48); teller=teller-(x*10); schrijf_rs232(teller+48); } void positie_rs232(unsigned char kolom,unsigned char lijn) { printf_rs232("\27\89"); schrijf_rs232(lijn+32); schrijf_rs232(kolom+32); } void clearscreen_rs232(void) { printf_rs232("27\72\27\74"); } unsigned int adc_read10(unsigned char channel) { unsigned int temp; adcon0 = 1 + (channel<<2); adcon1 = 14-channel ; adcon2=0b00000110; adcon0 = adcon0 | 0x02; while (adcon0 & 0x02); temp = (adresh << 2); adresl = (adresl >>6); temp = temp + adresl; return (temp); } unsigned char adc_read8(unsigned char channel) { unsigned int dummy; dummy=adc_read10(channel); return adresh; } unsigned int adc_vrefplus10(void) { unsigned int temp; adcon0 = 0b00000001; adcon1 = 0b00011110; adcon2=0b00000110; adcon0 = adcon0 | 0x02; while (adcon0 & 0x02); temp = (adresh << 2); adresl=(adresl>>6); temp=temp+adresl; return (temp); } unsigned char adc_vrefplus8(void) { unsigned int dummy; dummy=adc_vrefplus10(); return adresh; } void pwm_enable(unsigned char channel) { pr2 = 0b11111111; t2con = 0b00000101; switch(channel) { case 1: ccp1con = 0b00001100; trisc = trisc & 0b11111011; break; case 2: ccp2con = 0b00001100; trisc = trisc & 11111101; break; } } void pwm_dutycycle(unsigned char channel, unsigned char cycle) { switch(channel) { case 1: ccpr1l = cycle; break; case 2: ccpr2l = cycle; break; } } void varopscherm(unsigned int vari) { unsigned int x, temp; temp=vari; x=vari/10000; //tienduizendtal if (temp>=10000) schrijf_rs232(x+0x30); vari=vari-x*10000; x=vari/1000; //duizendtal if (temp>=1000) schrijf_rs232(x+0x30); vari=vari-x*1000; x=vari/100; //honderdtal if (temp>=100) schrijf_rs232(x+0x30); vari=vari-x*100; //tiental x=vari/10; if (temp>=10) schrijf_rs232(x+0x30); vari=vari-x*10; //eenheden schrijf_rs232(vari+0x30); } // lcd functies void lcd_4bits(unsigned char data) { portd = portd & 0b11110000; portd = portd | (data & 0b00001111); portd = portd | 0b00100000; delay_10us(10); portd = portd & 0b11011111; delay_10us(10); } void lcd_command(unsigned char command) { unsigned char temp; portd = portd & 0b11101111; temp = (command >> 4) & 0b00001111; lcd_4bits(temp); lcd_4bits(command & 0b00001111); } void lcd_write(unsigned char data) { unsigned char temp; portd = portd | 0b00010000; temp = (data >> 4) & 0b00001111; lcd_4bits(temp); lcd_4bits(data & 0b00001111); } void lcd_init(void) { trisd = trisd & 0b11000000; portd = portd & 0b11101111; delay_ms(50); lcd_4bits(0b0011); delay_ms(5); lcd_4bits(0b0011); delay_us(150); lcd_4bits(0b0011); lcd_4bits(0b0010); lcd_4bits(0b0010); lcd_4bits(0b1000); lcd_4bits(0b0000); lcd_4bits(0b1100); lcd_4bits(0b0000); lcd_4bits(0b0001); lcd_4bits(0b0000); lcd_4bits(0b0110); lcd_command(0b00000010); delay_ms(20); } void lcd_printf(unsigned char text2print[]) { unsigned char teller=0; while (text2print[teller]) { lcd_write(text2print[teller]); teller++; } }