0% found this document useful (0 votes)
15 views11 pages

ADC_UART

Uploaded by

vinhtho12082004
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views11 pages

ADC_UART

Uploaded by

vinhtho12082004
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 11

main * - Printed on 12/2/2024 03:54:03 PM

//---------------TIMER 7 DOAN TU DONG DEM---------------------------


#include "msp430f5529.h"
#define DLED P3OUT

//prototype
void scanled();
void printled();
void delayms(int ms);
//khai bao bien
char tbl7seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
char buff[4]= {0,0,0,0}; // vung dem
int idx = 0; // Con tro quet led
int timer = 0;
int dem = 0;
char state = 0;
int delay = 0;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

//CAU HINH TIMER


TA0CTL = TASSEL_2 + ID_3 + MC_1; //SMCLK-DIV8-UP MODE
TA0CCTL0 = CCIE;
TA0CCR0 = 250; //2ms
__bis_SR_register(GIE); //cho phep ngat toan cuc

//GP IO
P3DIR = 0xFF;
P6DIR = 0x0F;

//MAIN LOOP
while(1){
while(state == 0);
dem++;
printled();
state = 0;
if(dem >= 20){
while(delay < 1000);
}
}
}

//chuong trinh con phuc vu ngat


#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A(void){
scanled();
timer++;
if(timer >= 100){
timer = 0;
state = 1;
}
if(dem >= 20){
delay++;
if(delay >= 1000) delay = 1000;
}
}
//QUET LED
void scanled(){
char ch;
ch = buff[idx];
DLED = tbl7seg[ch];
P6OUT = ~(1<<idx);
idx++;
if (idx>=4) idx = 0;
}
// HIEN THI LED 7 DOAN
void printled(){
buff[3] = dem/1000;
buff[2] = (dem%1000)/100;
buff[1] = ((dem%1000)%100)/10;
buff[0] = dem%10;
}
//DELAYMS
void delayms(int ms){
for(int i=0; i<ms ; i++)

Page 1
main * - Printed on 12/2/2024 03:54:03 PM
__delay_cycles(1000);
}

Page 2
main * - Printed on 12/2/2024 03:49:12 PM
//--------------ADC 1-----------------------------------------
#include "msp430f5529.h"
#define DLED P3OUT
#define CTR P6OUT
#define K1 BIT3 //P2.3
#define K2 BIT5 //P2.5
#define K3 BIT4 //P2.4
#define K4 BIT3 //P4.3

#define VR3 5
#define VR2 6
#define VR1 7

//prototype
void scanled();
void delayms(int ms);
void toDisplay(int dat);
unsigned int ReadADC12(int channel);

//khai bao bien


char tbl7seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
char buff[4]= {0,0,0,0}; // vung dem
int idx = 1; // Con tro quet led
unsigned int val;
unsigned char status = 0;

void main( void ){


WDTCTL = WDTPW + WDTHOLD;

//GP IO
P3DIR = 0xFF; // P3 la OUTPUT
P6DIR = 0x0F; // P6 la OUTPUT
P4DIR |= BIT0; P4OUT &= ~BIT0; //GND
P2REN |= (BIT3 + BIT4 + BIT5);
P2OUT |= (BIT3 + BIT4 + BIT5);
P4REN |= BIT3; P4OUT |= BIT3;

//MAIN LOOP
while(1){
if ((P2IN & K1) == 0) status = 1;
if ((P2IN & K2) == 0) status = 2;
switch(status){
case 1: val = ReadADC12(VR2); break;
case 2: ADC12CTL0 = 0;
}
toDisplay(val);
// scan to display 7segled
scanled();
delayms(5);
}
}
//CAU HINH ADC
unsigned int ReadADC12(int channel){
ADC12CTL0 &= ~ADC12ENC;
ADC12CTL0 |= (ADC12SHT0_2 + ADC12ON);
ADC12CTL1 = ADC12SHP;

ADC12MCTL0 |= channel; //CHON KENH


ADC12CTL0 |= (ADC12ENC + ADC12SC);

while (!(ADC12IFG & BIT0));

unsigned int result = ADC12MEM0;


ADC12CTL0 &= ~ADC12ENC;
return result;
}

//QUET LED
void scanled(){
char ch;
ch = buff[idx];
DLED = tbl7seg[ch];
CTR = ~(1<<idx);
idx++;
if (idx>=4) idx = 0;

Page 1
main * - Printed on 12/2/2024 03:49:12 PM
}
// HIEN THI LED 7 DOAN
void toDisplay(int dat){
buff[3] = dat/1000;
buff[2] = (dat%1000)/100;
buff[1] = ((dat%1000)%100)/10;
buff[0] = dat%10;
}
//DELAYMS
void delayms(int ms){
for(int i=0; i<ms ; i++)
__delay_cycles(1000);
}

Page 2
main * - Printed on 12/2/2024 03:53:19 PM
//-------------------------ADC 7 DOAN---------------------------------------
#include "msp430f5529.h"
#define DLED P3OUT
#define CTR P6OUT
#define K1 BIT3 //P2.3
#define K2 BIT5 //P2.5
#define K3 BIT4 //P2.4
#define K4 BIT3 //P4.3

#define VR3 5
#define VR2 6
#define VR1 7

//prototype
void scanled();
void delayms(int ms);
void toDisplay(int dat);
void ReadADC12(int channel);

//khai bao bien


char tbl7seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
char buff[4]= {0,0,0,0}; // vung dem
int idx = 0; // Con tro quet led
unsigned char status = 0;
int timer = 0;
int val = 0;

void main( void ){


WDTCTL = WDTPW + WDTHOLD;

//CAU HINH TIMER


TA0CTL = TASSEL_2 + ID_3 + MC_1; //SMCLK-DIV8-UP MODE
TA0CCTL0 = CCIE;
TA0CCR0 = 625; //5ms
__bis_SR_register(GIE); //cho phep ngat toan cuc

//CAU HINH ADC12


ReadADC12(VR2);
//GP IO
P3DIR = 0xFF; // P3 la OUTPUT
P6DIR = 0x0F; // P6 la OUTPUT
P4DIR |= BIT0; P4OUT &= ~BIT0; //GND
P2REN |= (BIT3 + BIT4 + BIT5);
P2OUT |= (BIT3 + BIT4 + BIT5);
P4REN |= BIT3; P4OUT |= BIT3;

//MAIN LOOP
while(1){
if ((P2IN & K1) == 0) status = 1;
if ((P2IN & K2) == 0) status = 2;

toDisplay(val);
}
} //END MAIN

//chuong trinh con phuc vu ngat


#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A(void){
scanled();
if(status == 1){
timer++;
if(timer >= 500){
timer = 0;
ADC12CTL0 |= (ADC12ENC + ADC12SC);
val = ADC12MEM0;
ADC12CTL0 &= ~ADC12ENC;
}
}
if(status == 2) ADC12MEM0 = 0;
}

void ReadADC12(int channel){


ADC12CTL0 &= ~ADC12ENC;
ADC12CTL0 |= (ADC12SHT0_2 + ADC12ON);
ADC12CTL1 = ADC12SHP;

Page 1
main * - Printed on 12/2/2024 03:53:19 PM
ADC12MCTL0 |= channel;
}

//QUET LED
void scanled(){
char ch;
ch = buff[idx];
DLED = tbl7seg[ch];
CTR = ~(1<<idx);
idx++;
if (idx>=4) idx = 0;
}
// HIEN THI LED 7 DOAN
void toDisplay(int dat){
buff[3] = dat/1000;
buff[2] = (dat%1000)/100;
buff[1] = ((dat%1000)%100)/10;
buff[0] = dat%10;
}
//DELAYMS
void delayms(int ms){
for(int i=0; i<ms ; i++)
__delay_cycles(1000);
}

Page 2
main * - Printed on 12/2/2024 03:49:52 PM

//------------------------PWM-----------------------------------------
#include "msp430f5529.h"
// define for PWM
#define F_CPU 1000000UL
#define PWM_PERIOD F_CPU/490
#define PWM_DUTY(x) ((unsigned long)x*PWM_PERIOD / (unsigned long)(0xff))

// khai báo port IO


#define K1 BIT3 //P2.3
#define K2 BIT5 //P2.5
#define K3 BIT4 //P2.4
#define LED_R 4 // p1.4 : LED RED
#define LED_G 3 // p1.3 : LED GREEN
#define LED_B 2 // p1.2 : LED BLUE
//------------- Khai báo prototype hàm
void delayms(int ms);
unsigned int ReadADC12();
void SetPWM(unsigned char pin, int val);
//KHAI BAO BIEN
unsigned int val;
unsigned char status = 0;
//---Ð?nh nghia chuong trình chính------------
void main( void ){
WDTCTL = WDTPW + WDTHOLD;

//GP IO
P4DIR |= BIT0; P4OUT &= ~BIT0; //GND
P2REN |= (BIT3 + BIT4 + BIT5);
P2OUT |= (BIT3 + BIT4 + BIT5);
P4REN |= BIT3; P4OUT |= BIT3;

// KHOI DONG PWM


TA0CCR0 = PWM_PERIOD; // PWM Period
TA0CTL = TASSEL_2 + MC_1 + ID_0;

// MAIN LOOP
while(1){

if ((P2IN & K1) == 0) status = 1;


if ((P2IN & K2) == 0) status = 2;
if ((P2IN & K3) == 0) status = 3;
switch(status){
case 1: val = ReadADC12()/10;
SetPWM(LED_R,val);
break;
case 2: val = ReadADC12()/10;
SetPWM(LED_G,val);
break;
case 3: val = ReadADC12()/10;
SetPWM(LED_B,val);
break;
}
delayms(50);
} // end while
} // end main
//----Ð?nh nghia các chuong trình con--------
void SetPWM(unsigned char pin, int val){
P1DIR |= (1<<pin);
P1SEL |= (1<<pin);
switch(pin){
case 2: TA0CCTL1 = OUTMOD_7;
TA0CCR1 = PWM_DUTY(val);
break;
case 3: TA0CCTL2 = OUTMOD_7;
TA0CCR2 = PWM_DUTY(val);
break;
case 4: TA0CCTL3 = OUTMOD_7;
TA0CCR3 = PWM_DUTY(val);
break;
}
}
//cau hinh ADC
unsigned int ReadADC12(){
// Vref+ = 3.3V -- protues
//ADC10CTL0 = SREF_1 + ADC10SHT_2 + ADC10ON + REF2_5V + REFON;

Page 1
main * - Printed on 12/2/2024 03:49:52 PM
// Vref+ = 3.3V - thuc te
ADC12CTL0 |= ADC12SHT0_2 + ADC12ON;
ADC12CTL1 |= ADC12SHP + ADC12CONSEQ_0;
//ADC12CTL2 = 0xA2;
ADC12MCTL0 |= ADC12SREF_0 + ADC12INCH_12;
ADC12CTL0 |= ADC12ENC + ADC12SC; // B1: START ADC
while(!(ADC12CTL0 & ADC12IFG0)); // B2: ADC bien doi --> wait
ADC12CTL0 = 0; // OFF ADC
return ADC12MEM0; // B3: doc gia tri bien doi
}
//DELAYMS
void delayms(int ms){
for(int i=0; i<ms ; i++)
__delay_cycles(1000);
}

Page 2
main * - Printed on 12/2/2024 03:51:16 PM
//------------------UART-------------------------------------------------------
#include "io430f5529.h"
#define PLED P3OUT
#define CTR P6OUT
#define K0 BIT3 //P2.3
#define K2 BIT5 //P2.5
#define K3 BIT4 //P2.4
#define K4 BIT3 //P4.3

//prototype
void delayms(int ms);
void uart_io();
//void uart_clock();
void uart_init();
void uart_char(char ch);
void uart_string(const char *s);
void blink(int time);
void UARTSendNum (float number0);

//khai bao bien


// LED 7 DOAN ANODE
int LED7A[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
//vung dem 4 so led 7 doan
unsigned int buff[4] = {0, 0, 0, 0};
int idx = 0;
int state = 0;
char lan = 0;

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

//GP IO
P3DIR = 0xFF; // P3 la OUTPUT
P6DIR = 0x0F; // P6 la OUTPUT
P4DIR |= BIT0; P4OUT &= ~BIT0; //GND
P2REN |= (BIT3 + BIT4 + BIT5);
P2OUT |= (BIT3 + BIT4 + BIT5);
P4REN |= BIT3; P4OUT |= BIT3;

//CAU HINH TIMER


TA0CTL = TASSEL_2 + ID_2 + MC_1;
TA0CCTL0 = CCIE;
TA0CCR0 = 375;
__bis_SR_register(GIE); //cho phep ngat toan cuc

//CAU HINH UART


uart_init();
uart_io();
//MAIN LOOP
while(1){
if((P2IN & K0) == 0){
while((P2IN & K0) == 0);
delayms(100);
lan++;
uart_char(lan+48);
blink(lan);
state ++;
}
if(lan > 8) lan = 0;
}
}

//TRUYEN DU LIEU UART


#pragma vector = USCI_A1_VECTOR
__interrupt void rx(void){
//char tmp = UCA1RXBUF;
}

//chuong trinh con phuc vu ngat


#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void){
}

Page 1
main * - Printed on 12/2/2024 03:51:16 PM

//HAM CHOP TAT LED


void blink(int time){
for(int i=0;i<time;i++){
PLED = 0xFF;
delayms(500);
PLED = 0x00;
delayms(500);
}
}

void delayms(int ms){


for(int i=0; i<ms; i++)
__delay_cycles(1000);
}

void uart_io(){
P4SEL |= (BIT4 + BIT5);
}

void uart_init(){
UCA1CTL0 = 0x00; //KHUNG DU LIEU 8bit, none, 1stop
UCA1CTL1 |= UCSWRST;
UCA1CTL1 |= UCSSEL_2;
UCA1BR0 = 104; //baudrate 9600 1Mhz
UCA1BR1 = 0;
UCA1MCTL = UCBRS_1; //TRUYEN MSB TRUOC
UCA1CTL1 &= ~UCSWRST;
UCA1IE |= (UCRXIE);
//__bis_SR_register(GIE);
}

void uart_char(char ch){


while(!(UCA1IFG & UCTXIFG));
UCA1TXBUF = ch;
}
void uart_string(const char *s){
while(*s != '\0'){
uart_char(*s);
s++;
}
}

Page 2
main * - Printed on 12/2/2024 03:51:43 PM
//UART 2
#include "io430f5529.h"

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff;
UCA0CTL1 =UCSWRST;
P4SEL |= BIT4 + BIT5;
UCA1CTL1 |= UCSSEL_2;
UCA1BR0 =104;
UCA1BR1 =0;
UCA1MCTL = UCBRS_1;
UCA1CTL1 &=~ UCSWRST;
UCA1IE |= UCRXIE;
__bis_SR_register(GIE);
while(1);

#pragma vector = USCI_A1_VECTOR


__interrupt void rx(void)
{
if (UCA1RXBUF =='0') //neu VDK nhan chu '0' thi tat het' den
{
P3OUT =0x00;
}
if (UCA1RXBUF =='1') //neu VDK nhan chu '1' thi sang' den
{
P3OUT =0x01;
}
if (UCA1RXBUF =='2') //neu VDK nhan chu '2' thi sang' den
{
P3OUT =0x02;
}
if (UCA1RXBUF =='3') //neu VDK nhan chu '3' thi sang' den
{
P3OUT =0x04;
}
if (UCA1RXBUF =='4') //neu VDK nhan chu '4' thi sang' den
{
P3OUT =0x08;
}
if (UCA1RXBUF =='5') //neu VDK nhan chu '5' thi sang' den
{
P3OUT =0x10;
}
if (UCA1RXBUF =='6') //neu VDK nhan chu '6' thi sang' den
{
P3OUT =0x20;
}
if (UCA1RXBUF =='7') //neu VDK nhan chu '7' thi sang' den
{
P3OUT =0x40;
}
if (UCA1RXBUF =='8') //neu VDK nhan chu '8' thi sang' den
{
P3OUT =0x80;
}
if (UCA1RXBUF =='9') //neu VDK nhan chu '9' thi sang' den
{
P3OUT =0xff;
}
}

Page 1

You might also like