久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4201|回復: 0
打印 上一主題 下一主題
收起左側

基于AVR的SCCB讀寫程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:26188 發表于 2015-6-23 14:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


  1. #include<iom16v.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define set_bit(a,b)  a|=(1<<b)
  5. #define clr_bit(a,b)  a&=(1<<b)
  6. #define get_bit(a,b)  a&(1<<b)
  7. #pragma interrupt_handler TX_end:14
  8. uchar TXEND;
  9. void TX_end()
  10. {

  11. TXEND=0;//發送完畢標志

  12. }
  13. void USART_INT()//初始化串口
  14. {

  15. //UCSRA默認
  16. UCSRB=0x48;//使能發送完畢中斷,禁能數據寄存器空中斷,使能發送模式,關閉接收,關閉接收中斷
  17. UCSRC=0x86;//禁止奇偶效驗,數據位8,停止位1,工作在異步模式
  18. UBRRH=0x00;//
  19. UBRRL=51;//波特率9600,8MHZ,

  20. SREG=0x80;//開啟全局中斷

  21. }



  22. void send_byte(uchar buffer)//向PC發送數據
  23. {
  24.    while(0==get_bit(UCSRA,5));//數據寄存器里的數據是不是為空如果是就寫數據

  25.     UDR=buffer;


  26. while(TXEND);//是否發送完畢?
  27. TXEND=1;//上一幀已經發送準備下一幀的發送

  28. }

  29. /*void ov7670_int()//7670初始化函數
  30. {



  31. }*/





  32. ////***********SCCB-----OX7670************************//////////
  33. void delay1ms(uint z)
  34. {
  35. uint j,k;
  36.     for(k=z;k;k--)
  37.                        {                          
  38.                       for(j=2666;j;j--) ;  //此處j不得小于27否則讀不出數據
  39.         }
  40.                

  41. }



  42. void int_twi_sccb()
  43. {
  44. TWBR=50;/*設置SCL的時鐘頻率在19。230根據公式SCL FREQUENCY=CPU Clock frequency/16+2(TWBR)*4的TWPS次方
  45. */


  46. }
  47. /**************************************************/
  48. //本函數為設置7670寄存器的最底層操作函數,
  49. //無返回值
  50. //ADD是要寫的寄存器地址,DATE是向里面寫入的數據
  51. //
  52. /*************************************************/

  53. void write_ov7670_sccb_twi(uchar add,uchar date)//向add指定的地址內寫入指定的數據
  54. {

  55.     //主發送模式程序/////////////////////////
  56.     TWCR=0xa4;//插入開始新號使能總線,使能START
  57.   delay1ms(1);
  58. while(0==get_bit(TWCR,7));//檢測起始信號是否發送?
  59. while((TWSR&0xf8)!=0x08)
  60. {
  61.   send_byte(0xf4);
  62.      send_byte(0x21);
  63.      send_byte(0xf4);//出錯

  64. }

  65. send_byte(0xf4);
  66. send_byte(0x11);
  67. send_byte(0xf4);//START信號的正確響應碼





  68. TWDR=0x42;//寫操作SCCB的器件地址0X42
  69. TWCR=0x84;//重啟啟動數據的發送
  70. delay1ms(1);
  71. while(0==get_bit(TWCR,7));//檢測數據信號是否發送?
  72. while((TWSR&0XF8)!=0x18)
  73. {

  74. send_byte(0xf4);
  75. send_byte(0x22);
  76. send_byte(0xf4);

  77.      }

  78. send_byte(0xf4);
  79. send_byte(0x12);
  80. send_byte(0xf4);//發送完畢有ACK應答響應碼





  81. TWDR=add;//寫操作SCCB的寄存器子地址
  82. TWCR=0x84;//重啟啟動數據的發送
  83. delay1ms(1);
  84. while(0==get_bit(TWCR,7));//檢測數據信號是否發送?
  85. while((TWSR&0XF8)!=0x28)
  86. {
  87. send_byte(0xf4);
  88. send_byte(0x23);//出錯
  89. send_byte(0xf4);
  90.      }

  91. send_byte(0xf4);
  92. send_byte(0x13);
  93. send_byte(0xf4);//發送完畢有ACK應答響應碼



  94. TWDR=date;//寫操作SCCB的寄存器數據
  95. TWCR=0x84;//重啟啟動數據的發送
  96. delay1ms(1);
  97. while(0==get_bit(TWCR,7));//檢測數據信號是否發送?
  98. while((TWSR&0XF8)!=0x28)
  99. {
  100. send_byte(0xf4);
  101. send_byte(0x24);//出錯
  102. send_byte(0xf4);
  103.      }

  104. send_byte(0xf4);
  105. send_byte(0x14);
  106. send_byte(0xf4);//發送完畢有ACK應答響應碼


  107. TWCR=0x94;//STOP信號




  108. }
  109. /**************************************************/
  110. //本函數為設置7670寄存器的最底層操作函數,
  111. //返回值為8位的數據
  112. //ADD是要讀的寄存器地址,
  113. //
  114. /*************************************************/
  115. uchar read_ov7670_sccb_twi(uchar add)//讀取一個add中的一個字節個數據
  116. {   
  117.          uchar date;
  118. //主發送模式程序/////////////////////////
  119.       
  120.    
  121.      TWCR=0xa4;//插入開始新號使能總線,使能START
  122.   delay1ms(1);
  123. while(0==get_bit(TWCR,7));//檢測起始信號是否發送?
  124. while((TWSR&0xf8)!=0x08)
  125. {
  126. send_byte(0xf4);
  127.      send_byte(0x01);
  128.      send_byte(0xf4);//出錯

  129. }

  130. send_byte(0xf4);
  131. send_byte(0x10);
  132. send_byte(0xf4);//START信號的正確響應碼





  133. TWDR=0x42;//寫操作SCCB的器件寫地址0X42
  134. TWCR=0x84;//重啟啟動數據的發送
  135. delay1ms(1);
  136. while(0==get_bit(TWCR,7));//檢測數據信號是否發送?
  137. while((TWSR&0XF8)!=0x18)
  138. {

  139. send_byte(0xf4);
  140. send_byte(0x02);
  141. send_byte(0xf4);

  142.      }

  143. send_byte(0xf4);
  144. send_byte(0x20);
  145. send_byte(0xf4);//發送完畢有ACK應答響應碼





  146. TWDR=add;//寫操作SCCB的寄存器子地址
  147. TWCR=0x84;//重啟啟動數據的發送
  148. delay1ms(1);
  149. while(0==get_bit(TWCR,7));//檢測數據信號是否發送?
  150. while((TWSR&0XF8)!=0x28)
  151. {
  152. send_byte(0xf4);
  153. send_byte(0x03);//出錯
  154. send_byte(0xf4);
  155.      }

  156. send_byte(0xf4);
  157. send_byte(0x30);
  158. send_byte(0xf4);//發送完畢有ACK應答響應碼


  159. TWCR=0x94;//STOP信號

  160. delay1ms(10);////無論讀完還是模式轉換后都要等待

  161. //主接收模式程序///////////////////////////////////////////
  162. TWCR=0xa4;//插入開始新號使能總線,使能START
  163.    delay1ms(1);
  164. while(0==get_bit(TWCR,7));//檢測起始信號是否發送?
  165. while((TWSR&0XF8)!=0x08)
  166. {send_byte(0xf4);
  167. send_byte(0x04);//出錯
  168. send_byte(0xf4);
  169.      }

  170. send_byte(0xf4);
  171. send_byte(0x40);
  172. send_byte(0xf4);//START信號的正確響應碼


  173. TWDR=0x43;//寫操作SCCB的器件讀地址0X43
  174. TWCR=0x84;//重啟啟動數據的發送
  175. delay1ms(1);
  176. while(0==get_bit(TWCR,7));//檢測數據信號是否發送?
  177. while((TWSR&0XF8)!=0x40)
  178. {send_byte(0xf4);
  179. send_byte(0x05);//出錯
  180. send_byte(0xf4);
  181.      }

  182. send_byte(0xf4);
  183. send_byte(0x50);
  184. send_byte(0xf4);//發送完畢有ACK應答響應碼


  185. TWCR=0x84;//啟動數據的接收
  186. delay1ms(1);
  187. while(0==get_bit(TWCR,7));//檢測數據信號是否發送?
  188. date=TWDR;
  189. while((TWSR&0XF8)!=0x58)
  190. {send_byte(0xf4);
  191. send_byte(0x06);
  192. send_byte(0xf4);}//出錯

  193. send_byte(0xf4);
  194. send_byte(0x60);
  195. send_byte(0xf4);//發送完畢有NACK應答響應碼


  196. TWCR=0x94;//STOP信號


  197. return(date);



  198. }
  199. void main()
  200. {

  201. uchar inceptdate;//讀出的寄存器數據
  202. DDRC=0xff;
  203. PORTC=0xff;
  204. USART_INT();
  205. int_twi_sccb();

  206. inceptdate=read_ov7670_sccb_twi(0x15);//讀寄存器地址為15的數據

  207. send_byte(0xf4);
  208. send_byte(inceptdate);//數據顯示
  209. send_byte(0xf4);

  210. delay1ms(10);//無論讀完還是寫完都要等等

  211. write_ov7670_sccb_twi(0x15,0x20);//寫寄存器15的數據位20
  212. delay1ms(10);

  213. inceptdate=read_ov7670_sccb_twi(0x15);//再次讀15的數據

  214. send_byte(0xf4);
  215. send_byte(inceptdate);//送顯示,已是校驗寫入錢與寫入后的對比
  216. send_byte(0xf4);
  217. while(1);


  218. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av中文在线 | 日韩一区在线播放 | 午夜国产精品视频 | 久久99精品久久久久子伦 | 精品国产91乱码一区二区三区 | 日韩欧美不卡 | 日韩成人在线免费观看 | 福利网站在线观看 | 在线观看国产精品一区二区 | av网站观看| aaa综合国产 | 99久久99| 国产日韩视频在线 | 亚洲精品乱码久久久久久蜜桃91 | 青青草免费在线视频 | 天天人人精品 | 伊人春色在线观看 | 亚洲3p| 伊人久久在线 | 欧美亚洲一区二区三区 | 狠狠干在线 | 美女黄视频网站 | 日韩在线精品强乱中文字幕 | 日韩av免费在线观看 | 国产精品久久国产精品 | 伊人影院在线观看 | 国产精品久久久乱弄 | 欧美日韩久久 | 欧美精品久久久久 | 精品国产18久久久久久二百 | 黄色福利| 最近免费日本视频在线 | 亚洲视频中文字幕 | 午夜视频在线播放 | 美女毛片 | 国产成人午夜精品影院游乐网 | 婷婷色婷婷 | 免费视频一区二区 | 成人黄视频在线观看 | 2019天天干天天操 | 九九亚洲 |