久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
基于AVR的SCCB讀寫程序
[打印本頁]
作者:
hujia
時(shí)間:
2015-6-23 14:41
標(biāo)題:
基于AVR的SCCB讀寫程序
#include<iom16v.h>
#define uchar unsigned char
#define uint unsigned int
#define set_bit(a,b) a|=(1<<b)
#define clr_bit(a,b) a&=(1<<b)
#define get_bit(a,b) a&(1<<b)
#pragma interrupt_handler TX_end:14
uchar TXEND;
void TX_end()
{
TXEND=0;//發(fā)送完畢標(biāo)志
}
void USART_INT()//初始化串口
{
//UCSRA默認(rèn)
UCSRB=0x48;//使能發(fā)送完畢中斷,禁能數(shù)據(jù)寄存器空中斷,使能發(fā)送模式,關(guān)閉接收,關(guān)閉接收中斷
UCSRC=0x86;//禁止奇偶效驗(yàn),數(shù)據(jù)位8,停止位1,工作在異步模式
UBRRH=0x00;//
UBRRL=51;//波特率9600,8MHZ,
SREG=0x80;//開啟全局中斷
}
void send_byte(uchar buffer)//向PC發(fā)送數(shù)據(jù)
{
while(0==get_bit(UCSRA,5));//數(shù)據(jù)寄存器里的數(shù)據(jù)是不是為空如果是就寫數(shù)據(jù)
UDR=buffer;
while(TXEND);//是否發(fā)送完畢?
TXEND=1;//上一幀已經(jīng)發(fā)送準(zhǔn)備下一幀的發(fā)送
}
/*void ov7670_int()//7670初始化函數(shù)
{
}*/
////***********SCCB-----OX7670************************//////////
void delay1ms(uint z)
{
uint j,k;
for(k=z;k;k--)
{
for(j=2666;j;j--) ; //此處j不得小于27否則讀不出數(shù)據(jù)
}
}
void int_twi_sccb()
{
TWBR=50;/*設(shè)置SCL的時(shí)鐘頻率在19。230根據(jù)公式SCL FREQUENCY=CPU Clock frequency/16+2(TWBR)*4的TWPS次方
*/
}
/**************************************************/
//本函數(shù)為設(shè)置7670寄存器的最底層操作函數(shù),
//無返回值
//ADD是要寫的寄存器地址,DATE是向里面寫入的數(shù)據(jù)
//
/*************************************************/
void write_ov7670_sccb_twi(uchar add,uchar date)//向add指定的地址內(nèi)寫入指定的數(shù)據(jù)
{
//主發(fā)送模式程序/////////////////////////
TWCR=0xa4;//插入開始新號使能總線,使能START
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測起始信號是否發(fā)送?
while((TWSR&0xf8)!=0x08)
{
send_byte(0xf4);
send_byte(0x21);
send_byte(0xf4);//出錯(cuò)
}
send_byte(0xf4);
send_byte(0x11);
send_byte(0xf4);//START信號的正確響應(yīng)碼
TWDR=0x42;//寫操作SCCB的器件地址0X42
TWCR=0x84;//重啟啟動(dòng)數(shù)據(jù)的發(fā)送
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測數(shù)據(jù)信號是否發(fā)送?
while((TWSR&0XF8)!=0x18)
{
send_byte(0xf4);
send_byte(0x22);
send_byte(0xf4);
}
send_byte(0xf4);
send_byte(0x12);
send_byte(0xf4);//發(fā)送完畢有ACK應(yīng)答響應(yīng)碼
TWDR=add;//寫操作SCCB的寄存器子地址
TWCR=0x84;//重啟啟動(dòng)數(shù)據(jù)的發(fā)送
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測數(shù)據(jù)信號是否發(fā)送?
while((TWSR&0XF8)!=0x28)
{
send_byte(0xf4);
send_byte(0x23);//出錯(cuò)
send_byte(0xf4);
}
send_byte(0xf4);
send_byte(0x13);
send_byte(0xf4);//發(fā)送完畢有ACK應(yīng)答響應(yīng)碼
TWDR=date;//寫操作SCCB的寄存器數(shù)據(jù)
TWCR=0x84;//重啟啟動(dòng)數(shù)據(jù)的發(fā)送
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測數(shù)據(jù)信號是否發(fā)送?
while((TWSR&0XF8)!=0x28)
{
send_byte(0xf4);
send_byte(0x24);//出錯(cuò)
send_byte(0xf4);
}
send_byte(0xf4);
send_byte(0x14);
send_byte(0xf4);//發(fā)送完畢有ACK應(yīng)答響應(yīng)碼
TWCR=0x94;//STOP信號
}
/**************************************************/
//本函數(shù)為設(shè)置7670寄存器的最底層操作函數(shù),
//返回值為8位的數(shù)據(jù)
//ADD是要讀的寄存器地址,
//
/*************************************************/
uchar read_ov7670_sccb_twi(uchar add)//讀取一個(gè)add中的一個(gè)字節(jié)個(gè)數(shù)據(jù)
{
uchar date;
//主發(fā)送模式程序/////////////////////////
TWCR=0xa4;//插入開始新號使能總線,使能START
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測起始信號是否發(fā)送?
while((TWSR&0xf8)!=0x08)
{
send_byte(0xf4);
send_byte(0x01);
send_byte(0xf4);//出錯(cuò)
}
send_byte(0xf4);
send_byte(0x10);
send_byte(0xf4);//START信號的正確響應(yīng)碼
TWDR=0x42;//寫操作SCCB的器件寫地址0X42
TWCR=0x84;//重啟啟動(dòng)數(shù)據(jù)的發(fā)送
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測數(shù)據(jù)信號是否發(fā)送?
while((TWSR&0XF8)!=0x18)
{
send_byte(0xf4);
send_byte(0x02);
send_byte(0xf4);
}
send_byte(0xf4);
send_byte(0x20);
send_byte(0xf4);//發(fā)送完畢有ACK應(yīng)答響應(yīng)碼
TWDR=add;//寫操作SCCB的寄存器子地址
TWCR=0x84;//重啟啟動(dòng)數(shù)據(jù)的發(fā)送
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測數(shù)據(jù)信號是否發(fā)送?
while((TWSR&0XF8)!=0x28)
{
send_byte(0xf4);
send_byte(0x03);//出錯(cuò)
send_byte(0xf4);
}
send_byte(0xf4);
send_byte(0x30);
send_byte(0xf4);//發(fā)送完畢有ACK應(yīng)答響應(yīng)碼
TWCR=0x94;//STOP信號
delay1ms(10);////無論讀完還是模式轉(zhuǎn)換后都要等待
//主接收模式程序///////////////////////////////////////////
TWCR=0xa4;//插入開始新號使能總線,使能START
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測起始信號是否發(fā)送?
while((TWSR&0XF8)!=0x08)
{send_byte(0xf4);
send_byte(0x04);//出錯(cuò)
send_byte(0xf4);
}
send_byte(0xf4);
send_byte(0x40);
send_byte(0xf4);//START信號的正確響應(yīng)碼
TWDR=0x43;//寫操作SCCB的器件讀地址0X43
TWCR=0x84;//重啟啟動(dòng)數(shù)據(jù)的發(fā)送
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測數(shù)據(jù)信號是否發(fā)送?
while((TWSR&0XF8)!=0x40)
{send_byte(0xf4);
send_byte(0x05);//出錯(cuò)
send_byte(0xf4);
}
send_byte(0xf4);
send_byte(0x50);
send_byte(0xf4);//發(fā)送完畢有ACK應(yīng)答響應(yīng)碼
TWCR=0x84;//啟動(dòng)數(shù)據(jù)的接收
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測數(shù)據(jù)信號是否發(fā)送?
date=TWDR;
while((TWSR&0XF8)!=0x58)
{send_byte(0xf4);
send_byte(0x06);
send_byte(0xf4);}//出錯(cuò)
send_byte(0xf4);
send_byte(0x60);
send_byte(0xf4);//發(fā)送完畢有NACK應(yīng)答響應(yīng)碼
TWCR=0x94;//STOP信號
return(date);
}
void main()
{
uchar inceptdate;//讀出的寄存器數(shù)據(jù)
DDRC=0xff;
PORTC=0xff;
USART_INT();
int_twi_sccb();
inceptdate=read_ov7670_sccb_twi(0x15);//讀寄存器地址為15的數(shù)據(jù)
send_byte(0xf4);
send_byte(inceptdate);//數(shù)據(jù)顯示
send_byte(0xf4);
delay1ms(10);//無論讀完還是寫完都要等等
write_ov7670_sccb_twi(0x15,0x20);//寫寄存器15的數(shù)據(jù)位20
delay1ms(10);
inceptdate=read_ov7670_sccb_twi(0x15);//再次讀15的數(shù)據(jù)
send_byte(0xf4);
send_byte(inceptdate);//送顯示,已是校驗(yàn)寫入錢與寫入后的對比
send_byte(0xf4);
while(1);
}
復(fù)制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲 欧美 精品
|
91精品国产一区二区三区
|
免费一级黄
|
中文字幕一区在线观看视频
|
久久久久国产一区二区三区
|
国产日韩欧美二区
|
不卡一区二区三区四区
|
日韩一区二区精品
|
久久涩涩
|
亚洲精品不卡
|
涩涩视频网站在线观看
|
欧美成人a∨高清免费观看 欧美日韩中
|
久久久影院
|
狠狠干天天干
|
成人在线免费视频
|
亚洲欧美国产一区二区三区
|
91在线精品视频
|
免费99视频
|
欧美一区二区免费视频
|
91免费在线
|
亚洲免费在线观看
|
日韩网站在线观看
|
国产精品久久久久久久久久免费看
|
国产日韩欧美激情
|
久草免费电影
|
米奇成人网
|
国产三级
|
伊人激情综合网
|
精产国产伦理一二三区
|
欧美激情一区二区三级高清视频
|
国产精品久久久久久久久久妞妞
|
亚洲天天干
|
成人在线观看免费爱爱
|
久久久人成影片一区二区三区
|
欧美亚洲一区二区三区
|
av天天澡天天爽天天av
|
亚洲精品乱码久久久久久蜜桃91
|
日韩在线视频一区二区三区
|
日日摸夜夜添夜夜添精品视频
|
99久久精品视频免费
|
日本a视频
|