#include<reg51.h> //#include"delay.h" //#include"74hc595.h" #ifndef _74hc595_h_ #define _74hc595_h_ sbit ds=P3^0; //connect to serial input pin of 74hc595 sbit clk=P3^1; //connect to clock input sbit _mr=P3^2; //connect to reset input #define rst_74hc595_mr=0;_mr=1; //to reset a device //routine to convert 8bit parellel to 1bit serial msb first void write_74hc595(unsigned char dat) { unsigned char i; for(i=0;i<=7;i++) { clk=0; ds=(dat&(0x80>>1))?1:0; clk=1; } //extra clock for moving from shift register to storage register clk=0; clk=1; //rst_74hc595 //reset shift register(optional) } void main() { unsigned int i; for(i=0;i<=255;i++) { write_74hc595(i); //delay_ms(500); } while(1); }
Showing posts with label embedded programming. Show all posts
Showing posts with label embedded programming. Show all posts
Sunday, 7 December 2014
Embedded C code for UART serial communication
Posted by Madan
Posted on 00:00
Saturday, 6 December 2014
Embedded C code for string copy in 8051 micro controller
Posted by Madan
Posted on 23:59
#include<reg51.h> code char str[]="welcome to vector"; data char t[20] _at_ 0x40; xdata char t1[20] _at_ 0x1000; main() { unsigned char i; for(i=0;str[i];i++) { t[i]=t1[i]=str[i]; } while(1); }
Embedded C code for switching of LED
Posted by Madan
Posted on 23:58
#include<reg51.h> //sfr P2=0x0a0; sbit sw1=P2^0; sbit sw2=P2^1; sbit sw3=P2^2; sbit sw4=P2^3; sbit led1=P2^4; sbit led2=P2^5; sbit led3=P2^6; sbit led4=P2^7; main() { while(1) { led1=sw1; led2=sw2; led3=sw3; led4=sw4; }
Embedded C code for LCD display
Posted by Madan
Posted on 23:57
#include<reg51.h> //#include"lcd8.h" #define lcd_data P0 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; void write_lcd(unsigned char dat) { lcd_data=dat; RW=0; EN=1; EN=0; //delay_ms(2); } void cmd_lcd(unsigned char cmd) { RS=0; write_lcd(cmd); } void disp_lcd(unsigned char c) { RS=1; write_lcd(c); } void init_lcd(void) { cmd_lcd(0x01); cmd_lcd(0x02); cmd_lcd(0x06); cmd_lcd(0x0e); cmd_lcd(0x38); cmd_lcd(0x80); } void str_lcd(char *s) { while(*s) disp_lcd(*s++); } void int_lcd(unsigned int n) { char a[5]={0},i=0; if(n==0) { disp_lcd('0'); return; } else { while(n>0) { a[i++]=((n%10)+48); n=n/10; } for(--i;i>=0;i--) { disp_lcd(a[i]); } } } void float_lcd(float f) { int i; unsigned char j; i=f; int_lcd(i); disp_lcd('.'); for(j=0;j<3;j++) { f=(f-i)*10; i=f; int_lcd(i); } } main() { init_lcd(); disp_lcd('v'); str_lcd("hello"); cmd_lcd(0xc0); int_lcd(1234); float_lcd(56.34); while(1); { } }
Embedded C code for 3x3 keypad matrix
Posted by Madan
Posted on 23:54
#ifdef _keypad_h_ #define _keypad_h_ sbit r0=p3^0;sbit c0=p3^4; sbit r1=p3^1;sbit c1=p3^5; sbit r2=p3^2;sbit c2=p3^6; sbit r3=p3^3;sbit c3=p3^7; code unsigned char keypad_lut[4][4]= { 1,2,3,4, 5,6,7,8, 9,10,11,12, 13,143,15,16 }; bit colscan() { return(c0&c1&c2&c3); } unsigned char keyscan() { unsigned char row,col; c0=c1=c2=c3=1; r0=r1=r2=r3=0; while(colscan()); r0=0; r1=r2=r3=1; if(!colscan()) { row=0;goto colcheck; } r1=0; r0=r2=r3=1; if(!colscan()) { row=1; goto colcheck; } r2=0; r0=r2=r3=1; if(!colscan()) { row=2; goto colcheck; } r3=0; r0=r1=r3=1; if(!colscan()) { row=3; goto colcheck; } colcheck: if(c0==0) col=0; else if(c1==0) col=1; else if(c2==0) col=2; else if(c3==0) col=3; return keypad_lut[row][col]; } #endif
Embedded C program to implement i2c protocol in 8051
Posted by Madan
Posted on 23:53
sbit scl=P3^0; sbit sda=P3^1; void i2c_start(void); void i2c_write(unsigned char dat); void i2c_ack(void); void i2c_stop(void); unsigned char i2c_read(void); void i2c_noack(void); void i2c_device_write(unsigned char sa, unsigned char addr,unsigned char dat); unsigned char i2c_device_read(unsigned char sa,unsigned char dat); /////////////////////////////////////////////////////// void i2c_start(void) { scl=1; sda=1; sda=0; } void i2c_write(unsigned char dat) { unsigned char i; for(i=0;i<=7;i++) { scl=0; sda=(dat&(0x80>>i))?1:0; scl=1; } } void i2c_ack(void) { scl=0; sda=1; scl=1; scl=0; } void i2c_stop(void) { scl=0; sda=0; scl=1; sda=1; } void i2c_device_write(unsigned char sa,unsigned char addr,unsigned char dat) { i2c_start(); i2c_write(sa); i2c_ack(); i2c_write(addr); i2c_ack(); i2c_write(dat); i2c_ack(); i2c_stop(); //delay_ms(9); } unsigned char i2c_read(void) { unsigned char buff=0x00,i; sda=1; for(i=0;i<=7;i++) { scl=1; if(sda) buff=buff|(0x80>>i); scl=0; } return buff; } void i2c_noack() { scl=0; sda=1; scl=1; } unsigned char i2c_device_read(unsigned char sa,unsigned char addr) { unsigned char buff; i2c_start(); i2c_write(sa); i2c_ack(); i2c_write(addr); i2c_ack(); i2c_start(); i2c_write(sa|1); i2c_ack(); buff=i2c_read(); i2c_noack(); i2c_stop(); return buff; } i2cdriver.c #include<reg51.h> #include"i2c.h" char t _at_ 0x30; main() { i2c_device_write(0xa0,0x00,'U'); t=i2c_device_read(0xa0,0x00); while(1); }
Embedded C program for Graphical LCD(GLCD) in 8051
Posted by Madan
Posted on 23:52
#define glcd P2 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; sbit RST=P2^3; sbit CS1=P2^4; sbit CS2=P2^5; #define PAGE_0 0xb8 //first page address #define PAGE_7 0xbf //last page address #define COL_ADDR 0x40 //base address of 64 columns #define NONE 0 #define CHIP1 1 #define CHIP2 2 #define BOTH 3 //primary drives proto types void InitGLCD(void); void CmdGLCD(unsigned char,unsigned char); void DispGLCD(unsigned char); void WriteGLCD(unsigned char); void ChipSel(unsigned char); //secondary driver proto types void ClrScreen(); void ClrPage(unsigned char,unsigned char); void ShowDigit(unsigned char); void ShowAlphabet(unsigned char); //api proto types void Puts_GLCD(char *); void Puti_GLCD(unsigned int); void Putf_GLCD(float f); void ShowImage(void); ///////////////////////////////////////// void InitGLCD(void) { RST=0; RST=1; //high clock for reset lcd controllers CmdGLCD(0x3e,BOTH); //to turn it OFF CmdGLCD(0x3f,BOTH); //to display ON CmdGLCD(0xb8,BOTH); //page '0' base address CmdGLCD(0x40,BOTH); //column base address CmdGLCD(0xc0,BOTH); //take cursor to top line of refresh RAM } /////////////////////////////////////// void CmdGLCD(unsigned char cmd,unsigned char chip) { ChipSel(chip); RS=0; WriteGLCD(ch); } //////////////////////////////////////// void DispGLCD(unsigned char ch) { RS=1; WriteGLCD(ch); } ////////////////////////////////////// void WriteGLCD(unsigned char val) { RW=0; GLCD=val; EN=1; EN=0; } //////////////////////////////////////// void ChipSel(unsigned char cs) { switch(cs) { case 0:CS1=0;CS2=0; return; case 1:CS1=1;CS2=0; return; case 2:CS1=0;CS2=1; return; case 3:CS1=1;CS2=1; return; } } //////////////////////////////////////// void ClrScreen() { unsigned char i,y; for(i=PAGE_0;i<=PAGE_7;i++) { CmdGLCD(i,BOTH); //select pages CmdGLCD(COL_ADDR,BOTH); for(y=0;y<64;y++) DispGLCD(0x00); //clear data in GLCD } } /////////////////////////////////////// void ClrPage(unsigned char page,unsigned char chip) { unsigned char y; CmdGLCD(PAGE_0+page,chip); CmdGLCD(COL_ADDR,chip); for(y=0;y<64;y++) DispGLCD(0x00); //clear data in GLCD } /////////////////////////////////////// code unsigned char digit_arr[10][4]= { 0xff,0x81,0x81,0xff, //0 0xff,0x00,0x00,0x00, //1 0xf9,0x89,0x89,0x8f, //2 0x89,0x89,0x89,0xff, //3 0x0f,0x08,0x08,0xff, //4 0x8f,0x89,0x89,0xf9, //5 0xff,0x89,0x89,0xf9, //6 0x01,0x01,0x01,0xff, //7 0xff,0x89,0x89,0xff, //8 0x9f,0x91,0x91,0xff, //9 }; ////////////////////////////////////// void ShowDigit(unsigned char dig) { unsigned char i; for(i=0;i<4;i++) { DispGLCD(digit_arr[dig][i]); } DispGLCD(0x00); //space between each digit } ////////////////////////////////////// void Puti_GLCD(unsigned int n) { char a[5]={0},i=0; if(n==0) { ShowDigit(0); return; } while(n) { a[i++]=(n%10); n=n/10; } for(--i;i>=0;i--) { ShowDigit(a[i]); } } /////////////////////////////////// code unsigned char alpha_arr[26][4]= { 0xfe,0x09,0x09,0xfe, //A 0xff,0x89,0x89,0xf6, //B 0xff,0x81,0x81,0x81 //C }; /////////////////////////////////// void ShowAlphabet(char c) { unsigned char i; for(i=0;i<4;i++) { DispGLCD(alpha_arr[c-'A'][i]); } DispGLCD(0x00); //to provide spacing } //////////////////////////////////// void Puts_GLCD(char *s) { while(*s) ShowAlphabet(*s++); } /////////////////////////////////// void Putf_GLCD(float f) { int i; unsigned char j; i=f; Puti_GLCD(i); DispGLCD(0x80); for(j=0;j<3;j++) { f=(f-i)*10; i=f; Puti_GLCD(i); } } /////////////////////////////// /*void ShowImage() { unsigned char i,j; for(i=0;i<8;i++) { CmdGLCD(0xb8+i,BOTH); CmdGLCD(0x40,BOTH); ChipSel(1); for(j=0;j<128;j++) { if(j==64) { ChipSel(2); } DispGLCD(arr[i][j]); } } }*/ Glcdmain.c #include<reg51.h> //#include"glcd.h" //#include"delay.h" void main(void) { unsigned char i; InitGLCD(); CmdGLCD(PAGE_0,BOTH); CmdGLCD(COL_ADDR,BOTH); Puti_GLCD(1234); ShowAlphabet('A'); ShowDigit('5'); Puts_GLCD("HAI"); while(1); }
ALP Program for edge trigger in 8051
Posted by Madan
Posted on 23:49
LED1 BIT P2.0 CSEG AT 0 SJMP MAIN CSEG AT 0003H CPL LED1 RETI MAIN: MOV IE,#81H ;EA=EX0=1 SETB IT0 ;for edge triggered MOV A,#01H AGAIN: MOV P1,A RL A SJMP AGAIN END
Embedded C Program to provide 1msec time delay
Posted by Madan
Posted on 23:48
void delay_ms(unsigned int dly) { unsigned int i; for(;dly>0;dly--) { for(i=122;i>0;i--); } } main() { delay_ms(1); while(1); }
Embedded C program for LCD by using bit bang method
Posted by Madan
Posted on 23:47
#define TEST 2 #include<reg51.h> //#include"delay.h" #if TEST==1 //using bit banging method to write #include"74hc595.h" #endif #if TEST==2 //using UARTMode_0 for write #include"uartmode_0.h" #include"utility.h" #endif //#include"lcd8.h" ////////////////lcd8///////// #define lcd_data P0 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; void write_lcd(unsigned char c) { #if TEST==1 write_74hc595(c); #endif; #if TEST==2 rev_bits2(c); uart_tx(x); #endif RW=0; EN=1; EN=0; //delay_ms(2); } void cmd_lcd(unsigned char cmd) { RS=0; write_lcd(cmd); } void disp_lcd(unsigned char c) { RS=1; write_lcd(c); } void init_lcd(void) { cmd_lcd(0x01); cmd_lcd(0x02); cmd_lcd(0x06); cmd_lcd(0x0e); cmd_lcd(0x38); cmd_lcd(0x80); } void str_lcd(char *s) { while(*s) disp_lcd(*s++); } void int_lcd(unsigned int n) { char a[5]={0},i=0; if(n==0) { disp_lcd('0'); return; } else { while(n>0) { a[i++]=((n%10)+48); n=n/10; } for(--i;i>=0;i--) { disp_lcd(a[i]); } } } void float_lcd(float f) { int i; unsigned char j; i=f; int_lcd(i); disp_lcd('.'); for(j=0;j<3;j++) { f=(f-i)*10; i=f; int_lcd(i); } } ///////////////////////bit banging and uart mode0 method to write////////// main() { #if TEST==2 init_uart(); #endif init_lcd(); disp_lcd('B'); cmd_lcd(0xc0); str_lcd("serial lcd"); while(1); }
74hc595.h
#ifndef _74hc595_h_ #define _74hc595_h_ sbit ds=p3^0; //connect to serial input pin of 74hc595 sbit clk=p3^1; //connect to clock input sbit _mr=p3^2; //connect to reset input #define rst_74hc595_mr=0;_mr=1; //to reset a device //routine to convert 8bit parellel to 1bit serial msb first void write_74hc595(unsigned char dat) { unsigned char i; for(i=0;i<=7;i++) { clk=0; ds=(dat&(0x80>>1))?1:0; clk=1; `} //extra clock for moving from shift register to storage register clk=0; clk=1; //rst_74hc595 //reset shift register(optional) } #endif
delay.h
#ifndef _delay_h_ #define _delay_h_ void delay_ms(unsigned int dly) { unsigned int i; for(;dly>0;dly--) { for(i=122;i>0;i--); } } main() { delay_ms(1); while(1); } #endif
Embedded C Program to perform 200 msec time delay in 8051
Posted by Madan
Posted on 23:44
#include<reg51.h> //unsigned int dly; #define mydata P1 void delay(unsigned char n); void main(void) { while(1) { mydata=0xff; mydata=0x00; delay(200); } } void delay(unsigned char n) { unsigned char i; for(i=n;i>0;i--) while(1); }
Basic LED program in 8051 micro controller
Posted by Madan
Posted on 23:43
#include<reg51.h> void delay(unsigned int n) { unsigned int i,j; for(i=n;i>0;i--) { for(j=0;j<1275;j++); } } main() { while(1) { P1=0x00; delay(1000); P1=0xff; } }
Embedded C Program for 4x4 matrix keypad
Posted by Madan
Posted on 23:41
#include<reg51.h> //#include<keypad.h> sfr p1=0x80; #ifdef _keypad_h_ #define _keypad_h_ sbit r0=p3^0;sbit c0=p3^4; sbit r1=p3^1;sbit c1=p3^5; sbit r2=p3^2;sbit c2=p3^6; sbit r3=p3^3;sbit c3=p3^7; code unsigned char keypad_lut[4][4]= { 1,2,3,4, 5,6,7,8, 9,10,11,12, 13,143,15,16 }; bit colscan() { return(c0&c1&c2&c3); } unsigned char keyscan() { unsigned char row,col; c0=c1=c2=c3=1; r0=r1=r2=r3=0; while(colscan()); r0=0; r1=r2=r3=1; if(!colscan()) { row=0;goto colcheck; } r1=0; r0=r2=r3=1; if(!colscan()) { row=1; goto colcheck; } r2=0; r0=r2=r3=1; if(!colscan()) { row=2; goto colcheck; } r3=0; r0=r1=r3=1; if(!colscan()) { row=3; goto colcheck; } colcheck: if(c0==0) col=0; else if(c1==0) col=1; else if(c2==0) col=2; else if(c3==0) col=3; return keypad_lut[row][col]; } #endif main() { //while(1) { keyscan(); while(!colscan()); } }
4Mux Segment LED
Posted by Madan
Posted on 23:40
#include<reg51.h> //#include"delay.h" //#include"seg.h" void delay_ms(unsigned int dly) { unsigned int i; for(;dly>0;dly--) { for(i=122;i>0;i--); } } #define segs_4_mux P0 sbit sel1=P2^0; sbit sel2=P2^1; sbit sel3=P2^2; sbit sel4=P2^3; unsigned char dp1=0x80,dp2=0x80,dp3=0x80,dp4=0x80; code unsigned char seg_lut[]= { 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10 }; void disp_4_mux_segs(unsigned int n) { segs_4_mux=seg_lut[n/1000]|dp1; sel1=0; //;delay_ms(10); sel1=1; segs_4_mux=seg_lut[(n/100)%10]|dp2; sel2=0; //;delay_ms(10); sel2=1; segs_4_mux=seg_lut[(n%100)/10]|dp3; sel3=0; //;delay_ms(10); sel3=1; segs_4_mux=seg_lut[n%10]|dp4; sel4=0; //;delay_ms(10); sel4=1; } //#endif void main(void) { while(1) disp_4_mux_segs(1234); }
Write an assembly programming code to implement 60sec timer
Posted by Madan
Posted on 23:28
$INCLUDE(DELAY100.ASM) $INCLUDE(SEG.ASM) CSEG AT 0 MAIN: MOV DPTR,#LUT MOV R4,#0 AGAIN: MOV A,R4 MOV B,#10 DIV AB MOVC A,@A+DPTR MOV SEG1,A MOV A,B MOVC A,@A+DPTR MOV SEG2,A ACALL DELAY100MS INC R4 CJNE R6,#60,AGAIN SJMP MAIN END
Write an ALP program to perform rotation right with carry operation.
Posted by Madan
Posted on 23:20
Subscribe to:
Posts (Atom)