以下是serialADC.c的內容 ============================================= #include "SerialADC.h" /* 外部中斷0服務子程序 */ void int0svr(void) interrupt 0 using 1 { uchar count,tmp,i; EX0 = 0; // 關閉外部中斷0 tmp = 0; CS = 1; // /CS置高,片選無效 IOCLK = 0; // I/O CLK置低 CS = 0; // 片選有效 _nop_(); // 執行一步空指令起到延時至少1.4us的作用 for (count=0;count<8;count++) { IOCLK = 1; // I/O CLOCK置高 if (DATAOUT) tmp++; tmp = tmp<<1; // 左移一位 IOCLK = 0; // I/O CLOCK置低 } CS = 1; // /CS置高,片選無效 DataResult = tmp; for(i=0;i<3;i++) // 適當延時超過17us _nop_(); EX0 = 1; // 打開外部中斷0 } void main() { EA = 1; EX0 = 1; // 打開外部中斷0 /* 無限循環,等待外部中斷0啟動模數轉換 */ while(1); }
====================================== 以下是SerialADC.h 的內容 ====================================== #ifndef _SERIALADC_H // 防止SerialADC.h被重復引用 #define _SERIALADC_H #include <reg52.h> // 引用標準庫的頭文件 #include <intrins.h> #define uchar unsigned char uchar DataResult; // 存放轉換后數據 sbit IOCLK = P1^0; // 輸入輸出時鐘I/O CLK sbit DATAOUT = P1^1; // 數據輸出DATA OUT sbit CS = P1^2; // 片選信號 #endif |