📄 zuopin.c
字号:
// Target : M8
// Crystal: 8.0000Mhz //8M晶振
#include <iom8v.h>
#include <macros.h>
void delay_us() //微秒延时程序(1us)
{
asm("nop");
}
void delay(unsigned int time)
{
while(time)
{ delay_us();
time--;
}
}
void init_1820() //初始化18b20
{
PORTD|=0X80; //总线置1
delay(10);
PORTD&=~0x80; //总线置0
delay(1200); // 延时等待
DDRD&=~0x80;
PORTD|=0x80; //总线置1
delay(50);
DDRD|=0x80;
PORTD|=0x80;
delay(200);
}
void write_1820(unsigned char temp) //写数据
{
unsigned char i=0;
for(;i<8;i++)
{
PORTD&=~0X80;
if(temp&(1<<i)) //写数据,从低位开始
PORTD|=0X80;
else
PORTD&=~0X80;
delay(50);
PORTD|=0X80;
}
PORTD|=0X80;
}
unsigned char read_1820() //读数据
{
unsigned char m,i=0,n=0;
for(;i<8;i++)
{
PORTD&=~0X80;
delay(5);
PORTD|=0X80;
DDRD&=~0X80;
m=(PIND&0X80); //读数据,从低位开始
if(m)
n|=(1<<i);
else
n&=~(1<<i);
delay(80);
DDRD|=0X80;
}
return (n);
}
void temperature_read() //读取温度值
{
unsigned char tempture;
unsigned char i,temh,teml;
init_1820(); //复位18b20
write_1820(0xcc); // 发出转换命令
write_1820(0x44); //启动温度转换
delay(400);
init_1820();
write_1820(0xcc); //发出读命令
write_1820(0xbe); //读数据
teml=read_1820();
temh=read_1820();
UDR=teml;
delay(150);
UDR=temh;
for(i=0;i<100;i++) //延时等待
delay(500);
}
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void) //初始化uart
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x33; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x18;
}
void main(void) //主函数
{
delay(1000);
DDRD=0Xff;
PORTD=0Xff;
uart0_init();
while(1)
temperature_read();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -