多个源程序模块已经声明,为何main提示模块程序函数未声明

2019-03-24 20:51发布

#include <AVR io.h>#include <STDINT.H>#include "twi.h" #include "uart.h" #define SET_1(a,b) a|=(1&lt;<B) io.h <avr #include *********************************** twi.c ********************************** } 0; return while(1); SET_1(PORTB,0); NOP(); uart_send(Read_data,5); 5); 0x00, twi_read(Read_data, twi_write(Write_data, CLE_0(PORTB,0); PORTB|="_BV(PB0);" DDRB|="_BV(PB0);" uart_init(); twi_init(); Read_data[5]="{0,0,0,0,0};" uint8_t Write_data[5]="{0x01,0x02,0x03,0x04,0x05};" { main(void) int asm(?nop?) NOP() #define a&="~(1<<b)" CLE_0(a,b)> #include <UTIL twi.h>#include <STDINT.H>/******************************* I2C 状态定义:MT主发送 MR主接收 ********************************/ #define START 0x08 #define RE_START 0x10 #define MT_SLA_ACK 0x18 #define MT_SLA_NOACK 0x20 #define MT_DATA_ACK 0x28 #define MT_DATA_NOACK 0x30 #define MR_SLA_ACK 0x40 #define MR_SLA_NOACK 0x48 #define MR_DATA_ACK 0x50 #define MR_DATA_NOACK 0x58 #define RD_DEVICE_ADDR 0xA1 //前4位器件固定,后三位看连线,最后1位是读写指令位 #define WD_DEVICE_ADDR 0xA0 /*************************** 常用TWI操作(主模式写和读) ***************************/ #define Start() (TWCR=(1&lt;<TWINT)|(1<<TWSTA)|(1<<TWEN)) io.h twi.h 做出Not <avr #include } 0; return uint8_t { #define ******************* uart.c #endif n); addr, *data, twi_read(uint8_t twi_write(uint8_t twi_init(void); void TWI_H #ifndef 1; Stop(); *(data+i)="TWDR;" if(Testack()!="START)" Wain(); SetAck(); Twi(); for(i="0;i<n;i++)" Wait(); 读从地址 Write8Bit(0xa1); 重新启动TWI Start(); stop(); if(TestAck()!="START)" wait(); 写数据首地址 Write8Bit(addr); 写从地址 Write8Bit(0xa0); 启动TWI i; n) ************************************* 操作成功返回1,操作失败返回0 地址 addr为要写的子地址,data为要写数据的首 利用ATmega8的硬件TWI向24C02读出n个字节 ************************************ 1; Write8Bit(*(data+1)); 写数据 利用ATmega8的硬件TWI向24C02写入n个字节 PORTC|="_BV(PC5)|_BV(PC6);" DDRC&="~_BV(PC5)|~_BV(PC6);" TWBR="F_CPU/TWI_BAUD*8-2;" TWSR="0XF8;" twi_init(void) ************************* TWI通信接口初始化 10000 TWI_BAUD 写数据到TWDR {TWDR="(x);TWCR=(1<<TWINT)|(1<<TWEN);}" Write8Bit(x) 启动I2C (TWCR="(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))" Twi() Ack应答 (TWCR&="~(1<<TWEA))" SetNoAck() 做出ACK应答 (TWCR|="(1<<TWEA))" SetAck() 观察返回状态 (TWSR&0xf8) TestAck() 等待中断发生 {while(!(TWCR&(1<<TWINT)));} Wait() 停止I2C Stop()> #include <SDINT.H>/******************* 串口通信接口初始化 *******************/ void uart_init(void) { UCSRA|=_BV(U2X);//波特率倍增 UCSRC|=_BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0);//发送与接收的长度为8位 UBRRL=0X0C; UBRRH=0X00; UCSRB|=_BV(RXEN)|_BV(TXEN); } /******************* 串口发送字节 *******************/ void uart_send(uint8_t *data, uint8_t n) { uint8_t i; for(i=0;i&lt;n;i++) { while(!(UCSRA&amp;_BV(UDRE))); UDR=*(data+1); } } /***************** uart.h ****************/ #ifndef UART_H #define UART_H void uart_init(void); void uart_send(uint8_t *data, uint8_t n); #endif 以上程序不知道哪里出问题,就是无法识别模块函数,请高手帮忙看看,先谢谢!

[ 本帖最后由 lhp8203 于 2012-7-17 15:34 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
lhp8203
1楼-- · 2019-03-25 02:50
不好意思,第一次发帖,不知道怎么弄,代码全部贴上去,看上去可能会很乱,现在我把它以附件方式上传,请大侠帮助看看!

一周热门 更多>