?? lab3.lst
字號:
1:
2: /****************************************************************
3: * Hi-Tech workshop exercise Lab3 *
4: *****************************************************************
5: * *
6: * Files required: *
7: * *
8: * lab3.c *
9: * MID_LCD.c *
10: * cnfig877a.h (Set the Configuration Word) *
11: * *
12: * pic.h (Hi-Tech file) *
13: * *
14: *****************************************************************
15: * *
16: * Notes: *
17: * *
18: * Device Fosc -> 16.00MHz (Clock supplied by target) *
19: * *
20: *****************************************************************/
21:
22: #include <pic.h> // processor if/def file
23: #include "cnfig877a.h"
24: #include "mid_lcd.h"
25:
26: //**********************************
27: //* Function Prototype Declaration
28: //**********************************
29: void Init_IO(void);
30: void Init_Adc( void );
31: void A2D( unsigned char );
32: void LCD_ItoA(unsigned int);
33: unsigned char Set_BCD_ASCII(unsigned char);
34:
35: // ================================================================
36: // **** Establish PIC16F877A Configuration Word
37: // **** == HS Oscillator Mode
38: // **** == Brown-Out Detect Enabled
39: // **** == Watch-Dog Timer Off
40: // **** == Code Protect Off
41: // **** == Low Voltage Programming Off
42: // **** == ICD2 Debug Mode On
43:
44: __CONFIG ( HS_OSC & BODEN_ON & WDT_OFF & CP_OFF & LVP_OFF & DEBUG_ON );
45:
46: // =================================================================
47:
48:
49: const char LCD_Msg1[]=" A/D Result: ";
50: const char LCD_Msg2[]=" MSB: LSB: ";
51:
52: unsigned int AD_Temp;
53: bit DS_Zero_Flag;
54:
55: union {
56: int AD_10bit;
57: struct {
58: char AD_LSB;
59: char AD_MSB;
60: }AD_Byte;
61: }AD_Int;
62:
63:
64: /*****************************
65: INITIALIZE I/O PORT
66: *****************************/
67:
68: void Init_IO(void)
69: {
70: ADCON1=0b00000110; // Disable A/D Function
71: TRISD=0x00; // Set PortD for Output
72: PORTD=0x80; // Initila LED display = 0x80
73: TRISA4=1; // Set SW2 for input
74: TRISE1=1; // Set SW6 for Input
75: }
76:
77:
78: /*****************************************
79: Initialize A/D & Comparator Module
80: ******************************************/
81:
82: void Init_Adc( void )
83: {
84: CMCON=0b000000111; // Analog comparator disable
85: ADCON1=0b00001110; // AN0 is A/D input
86: ADFM=1; // Right justified
87: ADCON0=0b10000001; // Selext CH0 , A/D on
88: }
89:
90: /***********************************
91: Convert A/D Channel
92: ************************************/
93:
94: void A2D( unsigned char channel )
95: {
96: unsigned char temp; // Temp storage
97:
98: temp = channel << 3; // Shift channel value three bits left
99: ADCON0 &= 0b11000111; // Clear channel select bits in ADCON0
100: ADCON0 |= temp; // Logically OR shifted channel value into place in ADCON0
101:
102: ADGO = 1; // Initiate conversion on selected channel
103: while (ADGO) ; // Poll ADGO bit until it clears, indicating conv. done
104: AD_Int.AD_Byte.AD_MSB=ADRESH;
105: AD_Int.AD_Byte.AD_LSB=ADRESL;
106: }
107:
108: //***************************************
109: //* Program Main ( ) *
110: //***************************************
111: void main(void)
112: {
113: Init_IO();
114: Init_Adc();
115: OpenLCD();
116: LCD_Set_Cursor(0,0);
117: putrsLCD(LCD_Msg1);
118: LCD_Set_Cursor(0,1);
119: putrsLCD(LCD_Msg2);
120:
121: while(1)
122: {
123: A2D(0x00); // Get 10-bit A/D result from CH0
124: LCD_Set_Cursor(12,0);
125: LCD_ItoA(AD_Int.AD_10bit);
126: LCD_Set_Cursor(6,1);
127: puthexLCD(AD_Int.AD_Byte.AD_MSB);
128: LCD_Set_Cursor(13,1);
129: puthexLCD(AD_Int.AD_Byte.AD_LSB);
130: }
131:
132: }
133:
134: void LCD_ItoA(unsigned int AD_Data)
135: {
136: AD_Temp=AD_Data;
137: DS_Zero_Flag=1;
138:
139: putcLCD(Set_BCD_ASCII(AD_Data/1000)); // 陪ボ
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -