Jak poprawnie skonfigurować Baudrate w Keilu dla mikrokontrolera 8051?
Keil kompilacj asembler ?????
From: "Łukasz Reczko" <rkobra_at_nospam_poczta.fm>
Subject: Keil kompilacj asembler ?????
Date: Wed, 2 Apr 2003 16:16:37 +0200
Witam
Mam male pytanko w z wiazku z keilem i kompilacja, mam taki kod:
////////////////////////////////////////
#include <REG420.H>
sbit DIODA = 0xB7; // Dioda zielona
#define XTAL 11059200 // CPU Oscillator Frequency
#define baudrate 115200 // predkosc transmisji
static void Serial_0 (void) interrupt 4 using 1 {
if (RI_0) {
RI_0=0;
DIODA =~DIODA;
}
}
void main(void) {
PCON |= 0x80;
TMOD |= 0x20;
TH1 = 256 - (XTAL / (192 * baudrate)); // Problem !!!!!!!!!!!!!!!!!!
TR1 = 1;
TI_1 = 1;// start timer 1
SCON0 = 0x50;
ES0 = 1;
EA = 1;
DIODA=0;
while (1) {
};
}
/////////////////////////////////////////////////////////////////////////
Jezeli go teraz zrobie kompilacje to w kod asemblera wyglada tak:
//////////////////////////////////////////////
C51 COMPILER V6.12 MAIN
04/01/2003 23:30:51 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\main.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\main.c ROM(SMALL) MODDP2
DEBUG OBJECTEXTEND CODE
stmt level source
1 #include <REG420.H>
2
3
4 sbit DIODA = 0xB7; // Dioda zielona
5
6 #define XTAL 11059200 // CPU Oscillator Frequency
7 #define baudrate 115200 // predkosc transmisji
8
9
10 static void Serial_0 (void) interrupt 4 using 1 {
11 1 if (RI_0) {
12 2 RI_0=0;
13 2 DIODA =~DIODA;
14 2 }
15 1 }
16
17
18 void main(void) {
19 1
20 1 PCON |= 0x80; // 0x80=SMOD: set serial baudrate
doubler
21 1 TMOD |= 0x20; // put timer 1 into MODE 2
22 1 TH1 = 256 - (XTAL / (192 * baudrate));
23 1 TR1 = 1;
24 1 TI_1 = 1;// start timer 1
25 1 SCON0 = 0x50; // serial port MODE 1, enable
serial receiver
26 1 ES0 = 1;
27 1 EA = 1; // enable serial interrupts
28 1 DIODA=0;
29 1 while (1) {
30 2
31 2 };
32 1
33 1 }
C51 COMPILER V6.12 MAIN
04/01/2003 23:30:51 PAGE 2
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION Serial_0 (BEGIN)
; SOURCE LINE # 10
; SOURCE LINE # 11
0000 309804 JNB RI_0,?C0002
; SOURCE LINE # 12
0003 C298 CLR RI_0
; SOURCE LINE # 13
0005 B2B7 CPL DIODA
; SOURCE LINE # 14
; SOURCE LINE # 15
0007 ?C0002:
0007 32 RETI
; FUNCTION Serial_0 (END)
; FUNCTION main (BEGIN)
; SOURCE LINE # 18
; SOURCE LINE # 20
0000 438780 ORL PCON,#080H
; SOURCE LINE # 21
0003 438920 ORL TMOD,#020H
; SOURCE LINE # 22
0006 E4 CLR A
// Problem !!!!!!!!!!!!!11
0007 F58D MOV TH1,A
// Problem !!!!!!!!!!!!!!22
; SOURCE LINE # 23
0009 D28E SETB TR1
; SOURCE LINE # 24
000B D2B9 SETB TI_1
; SOURCE LINE # 25
000D 759850 MOV SCON0,#050H
; SOURCE LINE # 26
0010 D2AC SETB ES0
; SOURCE LINE # 27
0012 D2AF SETB EA
; SOURCE LINE # 28
0014 C2B7 CLR DIODA
0016 ?C0003:
; SOURCE LINE # 29
; SOURCE LINE # 31
0016 80FE SJMP ?C0003
; FUNCTION main (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 32 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
//////////////////////////////////////////////////////////////////////////
////////////////////////////
Moje pytanie brzmi dlaczego z funkcji w C "TH1 = 256 - (XTAL / (192 *
baudrate));" nie otrzymuje w asemblerze MOV TH1,#0FFh
tylko:
CLR A
MOV TH1,A
o co w tym chodzi ?
Dzieki
Pozdrawiam
Kobra
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!news.nask.pl!news-stoc.telia.net!news-stoa.telia.net!telia.net!news.tele.dk!news.tele.dk!small.news.tele.dk!news.maxwell.syr.edu!sn-xit-03!sn-xit-01!sn-post-01!supern