用DS1821的测温报警输出功能,已经过实测,可以用的,已批量用于产品。
//ICC-AVR application builder : 2015-10-8 14:15:46
// Target : M8
// Crystal: 8.0000Mhz
/*新片烧录程序,电容加热温度高低设置成0x14,0x13;化雪板设置成0X02,0X00*/
#include #include #define uchar unsigned char #define uint unsigned int #define sint short int #define uint8 uchar #define uint16 unsigned short #define uint32 unsigned int #define bool uchar #define DS1620 0 #define CLK 1 #define RST 2 #define LEDL 3 #define LEDH 2 #define TEMPH 0x02 #define TEMPL 0x00 void Delay_ms(uint ms) { unsigned int i,j; for(i=0;i } void Delay_us(uint us)/////6us { unsigned int i,j; for(i=0;i } void Delay(uint ms)//////60us { unsigned int i,j; for(i=0;i } void Delay40(uint ms)//////60us { unsigned int i,j; for(i=0;i } void Delay_1slot(unsigned int x)/////5us { unsigned int i; i=x; while(i>0)i--; } void Delay_1us(uint ms) { unsigned int i; i=0; i=0; i=0; i=0; } void port_init(void) { PORTB = 0x07; DDRB = 0x07; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x0f; DDRD = 0x0f; } void led_rotation(void) { uchar j; for(j=0;j<4;j++)//循环点亮 { PORTD&=~BIT(3-j); Delay_ms(60); PORTD|=BIT(3-j); } } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9615 (0.2%) // char size: 8 bit // parity: Disabled void uart0_init(void) { 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; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); // uart0_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x00; //timer interrupt sources // SEI(); //re-enable interrupts //all peripherals are now initialized } /**************************************************************************** * 名称:UartSendByte() * 功能:向串口发送字节数据。 * 入口参数:data 要发送的数据 * 出口参数:无 ****************************************************************************/ void uart0SendByte(uint8 data) { while( !( UCSRA & (1< } /**************************************************************************** * 名称:UartSendString() * 功能:向串口发送字符串。 * 入口参数:data 要发送的数据 * 出口参数:无 ****************************************************************************/ void uart0SendString(uint8 *ptr) { while(*ptr) { uart0SendByte(*ptr++); } uart0SendByte(0x0D); uart0SendByte(0x0A); //结尾发送回车换行 } /**************************************************************************** * 名称:UartRcvByte() * 功能:从串口接收字节数据。 * 入口参数:无 * 出口参数:data 接收到的数据 ****************************************************************************/ uint8 uart0RcvByte(void) //接收采用查询方式 { while( !( UCSRA & (1< } void ds1821_reset() { //uchar ack; DDRB|=BIT(DS1620); PORTB&=~BIT(DS1620); //是低则将单总线拉低 Delay_us(600); PORTB|=BIT(DS1620); //是高则将单总线拉高 //Delay(1); DDRB&=~BIT(DS1620); while((PINB&BIT(DS1620))); while(!(PINB&BIT(DS1620))); // Delay_us(150); // ack=PINB; // ack&=0x01; Delay_us(50); // return ack; } void DS1821_WriteByte(uint8 dat) { uint8 i; DDRB|=BIT(DS1620); for(i=0;i<8;i++) { PORTB&=~BIT(DS1620); Delay_1slot(0); Delay_1slot(0); if (dat&0x01) { // bit = 1 LSB first PORTB|=BIT(DS1620); } else { // bit = 0 PORTB&=~BIT(DS1620); } Delay40(1); PORTB|=BIT(DS1620); Delay_1slot(0); dat >>= 1; } DDRB&=~BIT(DS1620); } uint8 DS1821_ReadByte(void) { uint8 dat,i; dat=0; for(i=0;i<8;i++) { dat >>= 1; DDRB|=BIT(DS1620);//设置p01为输出状态 PORTB&=~BIT(DS1620); PORTB|=BIT(DS1620); DDRB&=~BIT(DS1620);;//设置p01为输入状态 PORTB&=~BIT(RST); PORTB|=BIT(RST); if(PINB&BIT(DS1620)) { dat|=0x80; // msb 優先 } Delay40(1);//等40us, 加上其它程式碼, 每個bit有80us } return dat; } void DS1821_switchmode(void) { uint8 i; DDRB|=BIT(DS1620); PORTB|=BIT(DS1620); //是高则将单总线拉高 // Delay_ms(3000); Delay_1slot(1); PORTB&=~BIT(CLK); Delay_1slot(2); for(i=0;i<16;i++) { PORTB&=~BIT(DS1620); //是低则将单总线拉低 //Delay_1slot(1); PORTB|=BIT(DS1620); //是高则将单总线拉高 //Delay_1slot(1); } /* PORTB&=~BIT(DS1620); //是低则将单总线拉低 Delay_1slot(1); PORTB|=BIT(DS1620); //是高则将单总线拉高 Delay_1slot(1); PORTB&=~BIT(DS1620); //是低则将单总线拉低 Delay_1slot(1); PORTB|=BIT(DS1620); //是高则将单总线拉高 Delay_1slot(1); PORTB&=~BIT(DS1620); //是低则将单总线拉低 Delay_1slot(1); PORTB|=BIT(DS1620); //是高则将单总线拉高 Delay_1slot(1); PORTB&=~BIT(DS1620); //是低则将单总线拉低 Delay_1slot(1); PORTB|=BIT(DS1620); //是高则将单总线拉高 Delay_1slot(1); PORTB&=~BIT(DS1620); //是低则将单总线拉低 Delay_1slot(1); PORTB|=BIT(DS1620); //是高则将单总线拉高 Delay_1slot(1); PORTB&=~BIT(DS1620); //是低则将单总线拉低 Delay_1slot(1); PORTB|=BIT(DS1620); //是高则将单总线拉高 Delay_1slot(1); PORTB&=~BIT(DS1620); //是低则将单总线拉低 Delay_1slot(1); PORTB|=BIT(DS1620); //是高则将单总线拉高 Delay_1slot(1); PORTB&=~BIT(DS1620); //是低则将单总线拉低 Delay_1slot(1);
上一篇:avr继电器+1602程序
下一篇:AVR I2C通信程序
推荐阅读
史海拾趣
随着电子市场的日益竞争,Cantherm公司面临着市场拓展的难题。为了打开新的销售渠道,公司决定加大在国际市场的宣传力度,同时积极参加各种电子行业的展会和论坛。通过与国际同行的交流与合作,Cantherm不仅提升了品牌知名度,还成功拓展了海外市场,实现了业务的多元化发展。
在电子行业中,产品质量是企业生存和发展的关键。Cellergy公司深知这一点,始终将品质放在首位。公司建立了严格的质量管理体系,从原材料采购到生产加工再到产品出厂,每一个环节都严格把关。这种对品质的执着追求使得Cellergy公司的电容器产品在市场中获得了良好的口碑,赢得了客户的信赖和支持。
面对日益严峻的环境问题,CTC Coils Ltd公司积极响应国家绿色发展的号召,开始实施绿色环保战略。公司引进先进的生产设备和工艺,优化生产流程,减少能源消耗和废物排放。同时,公司还研发出了一系列环保型电感线圈产品,满足了市场对绿色电子产品的需求。
在快速发展的过程中,CTC Coils Ltd公司始终注重企业文化建设和团队建设。公司倡导创新、务实、高效的企业精神,鼓励员工勇于创新、追求卓越。同时,公司还注重员工的培训和成长,为员工提供广阔的发展空间和良好的职业晋升通道。这些举措使得公司凝聚力不断增强,为公司的长远发展奠定了坚实的基础。
请注意,这些故事是虚构的,旨在展示一个电子行业公司可能经历的发展路径和关键阶段。实际情况可能因公司具体情况和市场环境的不同而有所差异。
在电子行业中,产品质量是企业生存和发展的关键。CDI-DIODE公司始终坚持品质至上的原则,从原材料采购到生产流程控制,再到产品检测,都严格把关。这种对品质的执着追求赢得了客户的信任和口碑,使公司在激烈的市场竞争中脱颖而出。
有调通过marvell wifi 8686 sdio接口驱动来讨论下??? 正在调sdio接口的wifi 8686驱动,sdio确认好的,读写寄存器,加载固件都没问题。有以下问题: 1. 我是直接把驱动放在bsp中编的,wince启动后自动加载wifi驱动, 并且这个wifi驱动会自行搜索热点。我的理解是wifi驱动加载固件启动完wifi芯片注册网络 ...… 查看全部问答∨ |
|
用电位器输出一个电压值,从我watch窗口看到的ADCresult值都在变化,变化比较大。如0xabc0,b为都会能差4,帮忙分析一下可能那里设置不对。谢谢!… 查看全部问答∨ |
从参加抢LM3S811的活动后,每天都期待啊,终于在4.26的下午,顺风快递发来信息去取快递,其实已经料到是811到啦,好兴奋的跑到校门口外迎接顺风,领到包裹后,回寝室迫不及待的打开它,没错是811 。用811把我以前的LCD有重新驱动了起来,下面是我这 ...… 查看全部问答∨ |