//ICC-AVR application builder : 2007-12-5 17:34:01 // Target : m48 // Crystal: 1.0000Mhz #include <iom168v.h> #include <macros.h> #include <myfun.h> //#include <I2C.h> #define START 0x08 #define ReSTART 0x10 #define MT_SLA_ACK 0x18 #define MT_DATA_ACK 0x28 #define MR_SLA_ACK 0x40 #define MR_DATA_ACK 0x50 #define MR_DATA_NACK 0x58 #define SLA_W 0xA0 #define SLA_R 0xA1 #define ADDRESS 0x00 #define DATA 0x55 void port_init(void) { //set LED PIN output DDRC |= (1<<DDC3);DDRC |= (1<<DDC2);DDRC |= (1<<DDC1);DDRC |= (1<<DDC0); DDRD |= (1<<DDD7);DDRD |= (1<<DDD6);DDRD |= (1<<DDD5);DDRD |= (1<<DDD4); //set LED off PORTD = 0xF0;PORTC = 0x0F; } void Error() { USART_Transmit(TWSR & 0xF8); while(1) LedBlk(); } //****TWI_ByteW()****// void TWI_ByteW(unsigned char add,unsigned data) { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //START while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != START) //check Error(); TWDR = SLA_W; //send SLA_W TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != MT_SLA_ACK) //check Error(); TWDR = add; //send address TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != MT_DATA_ACK) //check Error(); TWDR = data; //send data TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != MT_DATA_ACK) //check Error(); TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //send stop Delayus(150); } //****TWI_CByteR()****// unsigned char TWI_CByteR() { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //START while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != START) //check Error(); TWDR = SLA_R; //send SLA_R TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != MR_SLA_ACK) //check Error(); TWCR = (1<<TWINT) | (1<<TWEN); //receive data while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != MR_DATA_NACK) //check Error(); TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //send stop return TWDR; } //****TWI_ByteR()****// unsigned char TWI_ByteR(unsigned char add) { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //START while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != START) //check Error(); TWDR = SLA_W; //send SLA_W TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != MT_SLA_ACK) //check Error(); TWDR = add; //send address TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != MT_DATA_ACK) //check Error(); TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //ReSTART while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != ReSTART) //check Error(); TWDR = SLA_R; //send SLA_R TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != MR_SLA_ACK) //check Error(); TWCR = (1<<TWINT) | (1<<TWEN); //receive data while(!(TWCR & (1<<TWINT))) //wait for int ; if((TWSR & 0xF8) != MR_DATA_NACK) //check Error(); TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //send stop return TWDR; } void main(void) { unsigned char data; CLI(); port_init(); USART_Init(); SEI(); TWI_ByteW(0x00,0xA0); TWI_ByteW(0x01,0xA1); TWI_ByteW(0x02,0xA2); TWI_ByteW(0x03,0xA3); TWI_ByteW(0x04,0xA4); TWI_ByteW(0x05,0xA5); TWI_ByteW(0x06,0xA6); TWI_ByteW(0x07,0xA7); TWI_ByteW(0x08,0xA8); TWI_ByteW(0x09,0xA9); USART_Transmit(TWI_ByteR(0x00)); USART_Transmit(TWI_ByteR(0x01)); USART_Transmit(TWI_ByteR(0x02)); USART_Transmit(TWI_ByteR(0x03)); USART_Transmit(TWI_ByteR(0x04)); USART_Transmit(TWI_ByteR(0x05)); USART_Transmit(TWI_ByteR(0x06)); USART_Transmit(TWI_ByteR(0x07)); USART_Transmit(TWI_ByteR(0x08)); USART_Transmit(TWI_ByteR(0x09)); }
一、AT&T格式Linux汇编语法格式在AT&T汇编格式中,寄存器名要加上'%'作为前缀;而在Intel汇编格式中,寄存器名不需要加前缀。例如:AT&T格式Intel格式pushl%eaxpusheax在AT&…
在某个时间点执行一次任务at工具作用:用于执行一次性任务,需要指定执行的时间。at工具来源于at软件包。依赖与atd服务,需要启动才能实现at任务。#通过这个守护进程见监控at的相关内容#选项:-l:查看当前定义好的计划任务-dnum:根据…
译自:MDN(Mozilla开发者网络)At-rule一、什么是at-ruleseg:@charset"utf-8";at-rule是CSS样式声明,以@开头,紧跟着是标识符(charset),最后以分号(;)结尾。二、几个at-rules…
关于os.chdir(path)位置对程序的影响,importosimporttime#直接把path放到open()里面deffu0():star=time.time()foriinrange(100):p=os.listdir('E:/…
对于功能较多、考虑用户体验的程序,配置功能是必不可少的,如何存储程序的各种配置?1)可以用全局变量,不过全局变量具有易失性,程序崩溃或者关闭之后配置就没了,再者配置太多,将变量分配到哪里也是需要考虑的问题。2)用配置文件,通过在程序中读配置…
JavaStringdateStart="01/14/201508:29:58";StringdateStop="01/15/201511:31:48";//HHconvertshourin24hoursformat(0-23),dayca…
nodejs对文件的读写还是相当灵活的,可以根据不同的场景来选择不同的方法,具体可以参见:Nodejsfs一.直接操作文件最简单的两个fs.readFile和fs.writeFile举例:这个程序的功能是将一个比较大json格式的文件转换成…
文已经同步至我的个人博客站点:积累吧|jQuery选择器大全(48个代码片段+21幅图演示)1.id选择器(指定id元素)将的元素背景色设置为黑色。(id选择器返单个元素)$(document).ready(function(){$('#o…