📄 uart_to_twi_m8_组合.i
字号:
#line 1 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
test
#line 13 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
#line 1 "C:/icc/include/iom8v.h"
#line 7 "C:/icc/include/iom8v.h"
#line 10 "C:/icc/include/iom8v.h"
#line 13 "C:/icc/include/iom8v.h"
#line 16 "C:/icc/include/iom8v.h"
#line 15 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
#line 1 "C:/icc/include/macros.h"
#line 35 "C:/icc/include/macros.h"
#line 16 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
void check_I2C(void);
void init_data(void);
void port_init(void);
void init_devices(void);
void timer0_init(void);
void check_watchdog(void);
void process_data_pack(void);
void twi_transmint(void);
void watchdog_init(void);
void check_main_led(void);
void check_slave_led(void);
void ascii_to_hex(void);
unsigned char Twi_Hex_Data[3];
unsigned char Twi_ASCI_Data[6];
unsigned char Twi_Write_Flag,Twi_Read_Flag;
unsigned char Twi_ASCI_Data_Flag,Twi_Hex_Data_Flag;
unsigned char Slave_Led_Status;
unsigned char Main_Led_Status,Cur_Main_Led_Status,Count_10ms;
unsigned char UART_RX_buff[127];
unsigned char UART_TX_buff[127];
unsigned char Rx_Flag;
unsigned char Rx_Temp,Rx_Count;
unsigned char Rx_Start_Pack_Flag,Rx_Over_Pack_Flag;
unsigned char Write_Error[5] = {'x','w','4','0','x'};
unsigned char Read_Error[5] = {'x','w','8','0','x'};
void main(void)
{
init_devices();
init_data();
USART_Transmit( "read go!" );
while(1)
{
UART_Receive();
check_watchdog();
process_data_pack();
twi_transmint();
check_main_led();
}
}
void process_data_pack(void)
{
unsigned char cnt,dat;
if(Rx_Over_Pack_Flag == 1)
{
Slave_Led_Status = 1;
check_slave_led();
Rx_Over_Pack_Flag = 0;
Slave_Led_Status = 0;
if(UART_RX_buff[1] == 0x57)
{
for(cnt =0;cnt<6;cnt++)
{
dat = UART_RX_buff[cnt+2];
if((dat >= 0x30)&&(dat <=0x39))
{
Twi_ASCI_Data[cnt] = dat - 0x30;
}
else if((dat>=0x41)&&(dat<=0x46))
{
Twi_ASCI_Data[cnt] = dat - 0x37;
}
}
ascii_to_hex();
Twi_Write_Flag = 1;
}
if(UART_RX_buff[1] == 0x52)
{
for(cnt =0;cnt<4;cnt++)
{
dat = UART_RX_buff[cnt+2];
if((dat >= 0x30)&&(dat <=0x39))
{
Twi_ASCI_Data[cnt] = dat - 0x30;
}
else if((dat>=0x41)&&(dat<=0x46))
{
Twi_ASCI_Data[cnt] = dat - 0x37;
}
}
ascii_to_hex();
Twi_Read_Flag = 1;
}
Twi_Hex_Data_Flag = 1;
#line 175 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
}
}
void ascii_to_hex(void)
{
unsigned char cnt,i;
for(cnt=0,i=0;cnt<6;cnt++,cnt++,i++)
{
Twi_Hex_Data[i] = Twi_ASCI_Data[cnt+1];
Twi_Hex_Data[i] <<= 4;
Twi_Hex_Data[i] += Twi_ASCI_Data[cnt];
}
}
void hex_to_ascii(unsigned char dat)
{
unsigned char dat_buff;
dat_buff = dat;
dat = dat&0x0f;
if((dat>=0)&&(dat<=9))
{
dat += 0x30;
}
else
dat += 0x37;
UART_TX_buff[7] = dat;
dat = dat_buff;
dat >>= 4;
dat = dat&0x0f;
if((dat>=0)&&(dat<=9))
{
dat += 0x30;
}
else
dat += 0x37;
UART_TX_buff[8] = dat;
}
#line 219 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
unsigned char general_hex_to_ascii(unsigned char dat)
{
dat = dat & 0x0f;
if((dat >= 0)&&(dat <= 9))
{
dat = dat + 0x30;
}
else if((dat>='A')&&(dat<='F'))
{
dat += dat + 0x37;
}
return dat;
}
void twi_transmint(void)
{
unsigned char dat1,dat2;
unsigned char dat1_buff;
if(Twi_Hex_Data_Flag == 1)
{
Twi_Hex_Data_Flag = 0;
if(Twi_Write_Flag == 1)
{
Twi_Write_Flag = 0;
dat1 = twi_Write(Twi_Hex_Data[0],Twi_Hex_Data[1],Twi_Hex_Data[2]);
dat1_buff = dat1;
dat1 >>= 4;
dat1 = dat1 & 0x0f;
dat1 = general_hex_to_ascii( dat1 );
USART_TransmitByte(dat1);
dat1 = dat1_buff;
dat1 = dat1 & 0x0f;
dat1 = general_hex_to_ascii( dat1 );
USART_TransmitByte(dat1);
if(dat1 == 0)
{
USART_Transmit(UART_RX_buff);
}
else
{
USART_Transmit(Write_Error);
}
USART_Transmit("ok!");
}
if(Twi_Read_Flag == 1)
{
USART_TransmitByte((Twi_Read_Flag+0x30));
USART_Transmit("yes or no?");
Twi_Read_Flag = 0;
dat2 = twi_Read(Twi_Hex_Data[0],Twi_Hex_Data[1]);
if(dat2 == 0)
{
USART_Transmit(Read_Error);
USART_Transmit("here!");
}
else
{
hex_to_ascii(dat2);
USART_Transmit(UART_RX_buff);
}
USART_Transmit("verify again!");
}
}
}
void init_data(void)
{
Twi_Write_Flag = 0;
Twi_Read_Flag = 0;
Twi_Hex_Data_Flag = 0;
Twi_ASCI_Data_Flag = 0;
Slave_Led_Status = 0;
Main_Led_Status = 0;
Cur_Main_Led_Status= 0;
Count_10ms = 0;
asm("wdr");
}
void port_init(void)
{
(*(volatile unsigned char *)0x38) = 0x3F;
(*(volatile unsigned char *)0x37) = 0x00;
(*(volatile unsigned char *)0x35) = 0x4F;
(*(volatile unsigned char *)0x34) = 0x00;
(*(volatile unsigned char *)0x32) = 0xFC;
(*(volatile unsigned char *)0x31) = 0x00;
}
void init_devices(void)
{
asm("cli");
port_init();
uart0_init();
twi_init();
timer0_init();
watchdog_init();
(*(volatile unsigned char *)0x55) = 0x00;
(*(volatile unsigned char *)0x5B) = 0x00;
(*(volatile unsigned char *)0x59) = 0x00;
asm("sei");
}
void check_watchdog(void)
{
asm("wdr");
}
void watchdog_init(void)
{
asm("wdr");
(*(volatile unsigned char *)0x41)=((1<< 3)|(1<< 2)|(1<< 0));
}
void timer0_init(void)
{
(*(volatile unsigned char *)0x53) = 0x00;
(*(volatile unsigned char *)0x52) = 0x4C;
(*(volatile unsigned char *)0x53) = 0x04;
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
(*(volatile unsigned char *)0x52) = 0x4C;
Count_10ms++;
if((Count_10ms>0)&&(Count_10ms<5))
{
Cur_Main_Led_Status = 1;
}
if((Count_10ms>5)&&(Count_10ms<10))
{
Cur_Main_Led_Status = 0;
}
}
void check_main_led(void)
{
if(Main_Led_Status != Cur_Main_Led_Status)
{
if(Main_Led_Status == 1)(*(volatile unsigned char *)0x32) |=(1 << (3));
else(*(volatile unsigned char *)0x32) &= ~(1 << (3));
Main_Led_Status = Cur_Main_Led_Status;
}
}
void check_slave_led(void)
{
if(Slave_Led_Status == 1)
{
(*(volatile unsigned char *)0x32) &= ~(1 << (2));
}
else
{
(*(volatile unsigned char *)0x32) |=(1 << (2));
}
}
void twi_init(void)
{
(*(volatile unsigned char *)0x56)= 0X00;
(*(volatile unsigned char *)0x20)= 0x20;
(*(volatile unsigned char *)0x21)= 0x00;
(*(volatile unsigned char *)0x22)= 0x22;
(*(volatile unsigned char *)0x56)= 0x44;
}
#line 411 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
unsigned char twi_Write(unsigned char wr_device_add,unsigned char RamAddress,unsigned char Wdata)
{
((*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 5)|(1<< 2));
while(!((*(volatile unsigned char *)0x56)&(1<< 7)))asm("wdr");
if(((*(volatile unsigned char *)0x21)&0xf8)!= 0x08) return((*(volatile unsigned char *)0x21)&0xf8);
{(*(volatile unsigned char *)0x23)=(wr_device_add);(*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 2);};
while(!((*(volatile unsigned char *)0x56)&(1<< 7)))asm("wdr");
if(((*(volatile unsigned char *)0x21)&0xf8)!= 0x18) return((*(volatile unsigned char *)0x21)&0xf8);
{(*(volatile unsigned char *)0x23)=(RamAddress);(*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 2);};
while(!((*(volatile unsigned char *)0x56)&(1<< 7)))asm("wdr");
if(((*(volatile unsigned char *)0x21)&0xf8)!= 0x28) return((*(volatile unsigned char *)0x21)&0xf8);
{(*(volatile unsigned char *)0x23)=(Wdata);(*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 2);};
while(!((*(volatile unsigned char *)0x56)&(1<< 7)))asm("wdr");
if(((*(volatile unsigned char *)0x21)&0xf8)!= 0x28) return((*(volatile unsigned char *)0x21)&0xf8);
((*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 4)|(1<< 2));
delay_ms(10);
return 0;
}
#line 433 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
unsigned char twi_Read(unsigned char rd_device_add,unsigned char RamAddress)
{
unsigned char temp;
((*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 5)|(1<< 2));
while(!((*(volatile unsigned char *)0x56)&(1<< 7)))asm("wdr");
if (((*(volatile unsigned char *)0x21)&0xf8)!= 0x08) return 0;
{(*(volatile unsigned char *)0x23)=(rd_device_add);(*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 2);};
while(!((*(volatile unsigned char *)0x56)&(1<< 7)))asm("wdr");
if (((*(volatile unsigned char *)0x21)&0xf8)!= 0x18) return 0;
{(*(volatile unsigned char *)0x23)=(RamAddress);(*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 2);};
while(!((*(volatile unsigned char *)0x56)&(1<< 7)))asm("wdr");
if (((*(volatile unsigned char *)0x21)&0xf8)!= 0x28) return 0;
((*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 5)|(1<< 2));
while(!((*(volatile unsigned char *)0x56)&(1<< 7)))asm("wdr");
if (((*(volatile unsigned char *)0x21)&0xf8)!= 0x10) return 0;
{(*(volatile unsigned char *)0x23)=(rd_device_add+1);(*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 2);};
while(!((*(volatile unsigned char *)0x56)&(1<< 7)))asm("wdr");
if(((*(volatile unsigned char *)0x21)&0xf8)!= 0x40) return 0;
((*(volatile unsigned char *)0x56)=(1<< 6)|(1<< 7)|(1<< 2));
while(!((*(volatile unsigned char *)0x56)&(1<< 7)))asm("wdr");
if(((*(volatile unsigned char *)0x21)&0xf8)!= 0x58) return 0;
temp=(*(volatile unsigned char *)0x23);
((*(volatile unsigned char *)0x56)=(1<< 7)|(1<< 4)|(1<< 2));
return temp;
}
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
UART_RX_buff[Rx_Count] =(*(volatile unsigned char *)0x2C);
Rx_Count = Rx_Count+1;
if(Rx_Count == 9)
{
Rx_Flag = 1;
Rx_Count = 0;
}
}
void uart0_init(void)
{
Rx_Count = 0;
Rx_Flag = 0;
Rx_Start_Pack_Flag = 0;
Rx_Over_Pack_Flag = 0;
(*(volatile unsigned char *)0x2A) = 0x00;
(*(volatile unsigned char *)0x2B) = 0x00;
(*(volatile unsigned char *)0x40) = ((1 << (7))|(1 << (2))|(1 << (1)));
(*(volatile unsigned char *)0x29) = 29;
(*(volatile unsigned char *)0x40) = 0x00;
(*(volatile unsigned char *)0x2A) = ((1<< 7)|(1<< 4)|(1<< 3));
}
#line 512 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
void UART_Receive(void)
{
if(Rx_Flag == 1)
{
Rx_Flag = 0;
if((UART_RX_buff[0] == 0x58)&&(UART_RX_buff[8] == 0x58))
{
Rx_Over_Pack_Flag = 1;
}
}
}
#line 532 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
void USART_Transmit( char *s )
{
while(*s)
{
USART_TransmitByte(*s);
s++;
}
}
#line 545 "H:\UART_TO_TWI\uart_to_twi_m8_组合.c"
void USART_TransmitByte( unsigned char data )
{
while ( !((*(volatile unsigned char *)0x2B) & (1<< 5)) )
asm("wdr");
(*(volatile unsigned char *)0x2C) = data;
}
void delay(unsigned int d)
{
while (d--)
asm("wdr");
}
void delay_us(int time)
{
do
{
time--;
}
while (time>1);
}
void delay_ms(unsigned int time)
{
while(time!=0)
{
delay_us(1000);
time--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -