如何用c语言编写单片机程序。

如何用c语言编写单片机程序。,第1张

使用单片机专用的编译器,比如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单片机编写个小程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9801859.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存