使用单片机专用的编译器,比如AVR单片机要用ICC for AVR、AVR Studio 等。然后在选项中选择单片机型号,比如ATmega16、ATmega128。最后要查询单片机所对应的库,也就是头文件。包含对应的头文件,头文件中有定义好的单片机的变量名和函数,写程序要用到,比如引脚可能定义为PORTA,这些要记住,不可以写其他的变量名。具体写程序,和普通的C程序没有什么区别。
1:
ORG 0000h
LJMP DSJU
ORG 0660H
DSJU: MOV TMOD,#60h ;T1 计数,工作方式2
MOV TH1,#0FCH ;赋初值,这是四次的,原来的是两次的
MOV TL1,#0FCH
SETB TR1 ;启动
DEL: JBC TF1 ,REP ;查询计数溢出
AJMP DEL
REP: CPL P10 ;取反
AJMP DEL
END
2:
ORG 0000h
LJMP DSJU
ORG 001BH
LJMP T1ISR
ORG 0660H
DSJU: MOV TMOD,#60h ;T1 计数,工作方式2
MOV TH1,#0FCH ;赋初值
MOV TL1,#0FCH
SETB TR1 ;启动
SJMP $
T1ISR:
CPL P10 ;取反
RETI
END
#include <reg52h>
#include "delayh"
#include "lcd1602h"
sbit SCK = P2^0;//sbit定义单片机的特殊功能寄存器变量
sbit SDA = P2^1;
bit ack = 0;//bit定义变量
void iic_start()
{
SDA = 1;
SCK = 1;
delay_us(1);
SDA = 0;
delay_us(1);
SCK = 0;//钳住总线,等待下次使用
}
void icc_stop()
{
SDA = 0;
SCK = 1;
delay_us(1);
SDA = 1;
delay_us(1);
SCK = 0;//钳住总线,等待下次使用
}
void iic_send_byte(unsigned char byte)
{
unsigned char i;
for(i = 0;i<8;i++)
{
SDA = byte & 0x80;//非0为1
SCK = 1;
delay_us(1);
SCK = 0;
byte <<=1;//左移一位
}
SDA = 1;
SCK = 1;
delay_us(1);
if(0 == SDA)//有应答
ack = 0;
else //无应答
ack =1;
SCK = 0;//钳住总线,等待下次使用
}
unsigned char iic_rcv_byte()
{
unsigned char i,temp;
SDA = 1;
for(i = 0;i < 8;i ++)
{
SCK = 0;
delay_us(1);
SCK = 1;
delay_us(1);
temp <<= 1;
if(SDA)
temp = temp+ 1;
}
SCK = 0;
return temp;
}
void iic_ack()
{
SDA = 0;
SCK = 1;
delay_us(1);
SCK = 0;
}
void iic_noack()
{
SDA = 1;
SCK = 1;
delay_us(1);
SCK = 0;
}
void AT_send_str(unsigned char deviceaddr,unsigned char romaddr,unsigned char s,unsigned char num)
{
unsigned char i;
iic_start();
iic_send_byte(deviceaddr);
if(ack == 1)
return;
iic_send_byte(romaddr);
if(ack == 1)
return;
for(i = 0;i < num; i ++)
{
iic_send_byte(s);
if(ack == 1)
return;
s++;
}
icc_stop();
}
void AT_rcv_str(unsigned char deviceaddr,unsigned char romaddr,unsigned char s,unsigned char num )
{
unsigned char i;
//SDA = 1;
iic_start();
iic_send_byte(deviceaddr);
if(ack == 1)
return;
iic_send_byte(romaddr);
if(ack == 1)
return;
iic_start();
iic_send_byte(deviceaddr + 1);
if(ack == 1)
return;
for(i = 0;i < num - 1; i++)
{
s = iic_rcv_byte();
iic_ack();//
s++;
}
s = iic_rcv_byte();
iic_noack();
icc_stop();
}
void main()
{
unsigned char i;
unsigned char testbuf[20] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,16,17,18,19};
unsigned char rcvbuf[20];
lcd_init();
AT_send_str(0xae,0,testbuf,10);
delay_ms(200);
AT_rcv_str(0xae,0,rcvbuf,10);
for(i = 0;i < 10; i++)
{
display_lcd_char(i,0,rcvbuf[i]+0x30);
}
while(1);
}
以上就是关于如何用c语言编写单片机程序。全部的内容,包括:如何用c语言编写单片机程序。、单片机基本程序怎么改能够成立、用51单片机编写个小程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)