Пожалуйста, помогите!!

S

Sidartha

Guest
Я пытаюсь Код Sotware UART и аппаратного UART для 8051C410 ..
аппаратного UART для связи с компьютером программное обеспечение для UART придает датчик ..Однако несмотря на аппаратные UART работает программное обеспечение UART не ..
Я приложил код и надеялся, здесь кто-то может мне помочь ..[/ CODE]

/ / # Pragma большой
# включить <c8051f410.h>
# включить <stdio.h>
# включить <string.h>
# включить <stdlib.h># DEFINE SYSCLK 24500000 / 8

# DEFINE BAUDRATE 9600# DEFINE TIME_COUNT SYSCLK/9600/12 / / СПС рассчитывает на один бит-времени.
# DEFINE TH_TIME_COUNT TIME_COUNT * 3 / 2 / / 3 / 2 бита времени, СПС / SWUART//------------------------------------------------ ----------------------------------------------
сбить SW_TX = P2 ^ 6;
сбить SW_RX = P1 ^ 0;разрядных SM_BUSY;
разрядных НИИ / / SW_UART получать полную индикатор
разрядных ИППП; / / SW_UART Передача Полное индикатор
разрядных STXBSY / / SW_UART TX флаг занятости
разрядных SREN / / SW_UART RX Включите
разрядных SES / / SW_UART уровне пользователя прерывания поддержки
Чар ДТР / / SW_UART TX регистр данных
Чар RDR / / SW_UART RX регистр данных

//------------------------------------------------ ----------------------------------------------
/ / Прототип функции
//------------------------------------------------ ----------------------------------------------
Пустота init_uart0 (VOID);
Пустота SYSCLK_Init (VOID);
Пустота PORT_Init (VOID);
Пустота enable_intr (VOID);
Пустота init_swuart (VOID);
Пустота WriteSwuart (Char * PTR);//------------------------------------------------ ----------------------------------------------
/ / ГЛАВНАЯ Регулярно
//------------------------------------------------ ----------------------------------------------

Основными Void (Пустота) (
XData Char ул [100];
Int I = 0, N = 0;

PCA0MD & = ~ 0x40; / / WDTE = 0 (Открытый сторожевой таймер
PCA0MD = 0x00;
PORT_Init (); / / Инициализация перекладину и GPIO
SYSCLK_Init (); / / Инициализация часами системы
init_uart0 ();
init_swuart ();
enable_intr ();

ИПП = 1;

While (1)
(
sprintf (Str, "Hello% D \ R", N );
WriteSwuart (STR);
)
)
//------------------------------------------------ ----------------------------------------------
Пустота WriteSwuart (Char * PTR) (
разрядных передать = 1;

While (передачи) (
если (ИППП) (
ИПП = 0;
ДТР = * PTR;
если (* PTR == '\ R') передать = 0;
CCF1 = 1;
PTR ;
)
)
)
//------------------------------------------------ ----------------------------------------------
SYSCLK_Init Void (Пустота)
(
OSCICN = 0x84;
)
//------------------------------------------------ ----------------------------------------------
PORT_Init Void (Пустота)
(
P0SKIP = 0xCF;

SMBus выбрали XBR0 = 0x01; / / uart0, SPI,
XBR1 = 0x41; / / Включить перекладину и слабые подтягивания
P1MDOUT | = 0xFF;
P2MDOUT | = 0xFF;
RE = 0;
P0MDIN = ~ 0x08;
)
//------------------------------------------------ ----------------------------------------------
init_uart0 Void (Пустота)
(

SCON0 = 0x10;
TH1 = - (SYSCLK/BAUDRATE/2);
CKCON & = ~ 0x0b;
CKCON | = 0x08;

TL1 = TH1;
TMOD & = ~ 0xF0;
TMOD | = 0x20;

TR1 = 1;

TI0 = 1;

)
//------------------------------------------------ ----------------------------------------------
Пустота enable_intr (VOID) (

SREN = 0; / / отключить SW_UART приемника
CR = 1; / / Начало СПС счетчик.
EIE1 | = 0x10;
EIE1 | = 0x81; / / SPI, SMBus разрешение прерывания
EIP1 | = 0x01;
EX0 = 1;
IT0 = 1;
ET2 = 1;
ES0 = 1;
EA = 1;
)
//------------------------------------------------ ----------------------------------------------
Пустота init_swuart (VOID) (

PCA0CPM0 = 0x10; / / Module0 негативные режима съемки;
/ / Модуль 0 прерывания отключены.
PCA0CPM1 = 0x48; / / Модуль 1 в программном режиме таймера;
/ / Module1 прерывания отключены.
PCA0CN = 0; / / Написать СПС инвалидов
PCA0MD | = 0x00; / / СПС развертки = SYSCLK / 4; СПС счетчик
/ / Прерывания отключены.
CCF0 = 0; / / Открытый модуля СПС до 0 и
CCF1 = 0; / / 1 модуля захвата / сравнения прерываний.
НИИ = 0; / / Открытый Получите полный флаг.
ИПП = 0; / / Открытый Передача полного флага.
SW_TX = 1; / / TX линия изначально высоким.
STXBSY = 0; / / Открытый SW_UART флаг занятости

PCA0CPM0 | = 0x01; / / Включить модуле 0 (получать) прерываний.
PCA0CPM1 | = 0x01; / / Включить модуль 1 (передача) не прерывает.
)
//------------------------------------------------ ----------------------------------------------
/ / Программное обеспечение UART ////////////////////////////////////////////// //////////////////
//------------------------------------------------ ----------------------------------------------
PCA_ISR Void (Пустота) прервать 11 (
статические Char SUTXST = 0;
статические Char SURXST = 0;
статического знака RXSHIFT Char;

неподписанных Int PCA_TEMP;

если (CCF0) (
CCF0 = 0;

переключателя (SURXST) (
0 случай:
если (SREN & ~ SW_RX) (
PCA_TEMP = (PCA0CPH0 <<8);
PCA_TEMP | = PCA0CPL0;
PCA_TEMP = TH_TIME_COUNT;
PCA0CPL0 = PCA_TEMP;
PCA0CPH0 = (PCA_TEMP>> 8);
PCA0CPM0 = 0x49;

SURXST ;
)
брейк;
Вариант 1: Вариант 2: Вариант 3: Вариант 4: случай 5: Случай 6: 7 дел: дела 8:

RXSHIFT = RXSHIFT>> 1;
если (SW_RX)
RXSHIFT | = 0x80;
PCA_TEMP = (PCA0CPH0 <<8);
PCA_TEMP | = PCA0CPL0;
PCA_TEMP = TIME_COUNT;
PCA0CPL0 = PCA_TEMP;
PCA0CPH0 = (PCA_TEMP>> 8);
SURXST ;
брейк;

Дело 9:
ОР = RXSHIFT;
НИИ = 1;
PCA0CPM0 = 0x11;
SURXST = 0;

брейк;

)
)

/ / Проверка прервать передачу; службы, если это набор CCF1.
Else If (CCF1) (
CCF1 = 0;
переключателя (SUTXST) (
0 случай:
SW_TX = 0;
PCA_TEMP = PCA0L;
PCA_TEMP | = (PCA0H <<8);
PCA_TEMP = TIME_COUNT;
PCA0CPL1 = PCA_TEMP;
PCA0CPH1 = (PCA_TEMP>> 8);
PCA0CPM1 | = 0x48;
SUTXST ;
брейк;

Вариант 1: Вариант 2: Вариант 3: Вариант 4: случай 5: Случай 6: случай 7: 8 дел: Дело 9:
SW_TX = (ДТР & 0x01);
ДТР>> = 1;
ДТР | = 0x80;

PCA_TEMP = (PCA0CPH1 <<8);
PCA_TEMP | = PCA0CPL1;
PCA_TEMP = TIME_COUNT;
PCA0CPL1 = PCA_TEMP;
PCA0CPH1 = (PCA_TEMP>> 8);
SUTXST ;
брейк;

Дело 10:
ИПП = 1;
SUTXST = 0;
SW_TX = 1;
PCA0CPM1 = 0x01;STXBSY = 0;
брейк;
)
)
)

 
HI

См. сайт IAR для применения к сведению -> вы найдете коды программного обеспечения UART

WWW.IAR.COM

BR

Боби

 

Welcome to EDABoard.com

Sponsor

Back
Top