View Single Post
Old 28-04-2008, 01:22 AM   #21
chukhivuitinh
Đệ tử 2 túi
 
Tham gia ngày: Jun 2005
Bài gửi: 27
:
Em thắc mắc bởi vì trong vd 2_1 có dòng :
"Hai dòng lệnh 26 và 27 đặt ngưỡng tràn tương ứng với 0,5
giây ở tần số thực thi lệnh là 5 MHz (tức là chip có clock bằng 20 MHz)."
rồi xuống cuối ví dụ a có dòng :
"điều chỉnh ngưỡng tràn để LED sẽ nhấp nháy
đúng 1 Hz (với mã hiện tại thì LED sẽ nhấp nháy ở 1,6 Hz, vì tần số thực thi lệnh
của chip sẽ là 8 MHz với bộ dao động nội 8 MHz và PLLx4 được kích hoạt) "

Sau khi đọc câu trả lời của a thì em đã hiểu ý nghĩa của dòng cuối này ,chứ trước đó em ko hiểu tại sao cùng set PLL4 mà sao trên thì 5MHz ,dưới thì 8 Mhz .Nhưng em đọc trong cái dsPIC Manual thì thấy FRC là 7,37 Mhz ,vậy PLLx4 = 29.48Mhz ,PLLx8 = 58.96 Mhz ,PLLx16 = 117.92 Mhz ,vậy đâu dùng 8Mhz được ,và giá trị nhỏ nhất của bộ dao động nội là 29.48Mhz ??? mà sao người ta để lẻ thế nhỉ ???

Ah ,anh giải thích thêm dùm em về cách khai báo biến :
ở vd 2-3 :
_ .bss cho đoạn chứa các dữ liệu không khởi tạo giá trị
(.data cho đoạn chứa các dữ liệu khởi tạo giá trị <<< là hằng số ??? )
_ .align 2 << ???
_ count: .space 2 << khai bao biến count 16bit
ở vd 2-4 :
_ .section Table,psv, address(0x0200) <<< khai báo bảng Table có địa chỉ 0x0200 ,vậy psv ở đây nghĩa là jì ???Trong cái tag Output em chẳng thấy cái psv này đâu cả :
Trích:
section address length (PC units) length (bytes) (dec)
------- ------- ----------------- --------------------
.reset 0 0x4 0x6 (6)
.ivt 0x4 0x7c 0xba (186)
.aivt 0x84 0x7c 0xba (186)
.text 0x100 0x4c 0x72 (114)
.dinit 0x14c 0x2 0x3 (3)
.isr 0x14e 0x2 0x3 (3)
Table 0x200 0x14 0x1e (30)
__FOSC 0xf80000 0x2 0x3 (3)
__FWDT 0xf80002 0x2 0x3 (3)
__FBORPOR 0xf80004 0x2 0x3 (3)
__FGS 0xf8000a 0x2 0x3 (3)

Total program memory used (bytes): 0x21c (540) 1%
Tiếp tục ^_^ ,trong vd 2-4 PSV là bit 2 trong thanh ghi Core Control Register CORCON
vậy dòng :
_ mov #psvpage(Table),W0 <<< xác định địa chỉ trang chứa Table vào W0 ???
_ mov W0, PSVPAG <<< ghi cái địa chỉ này vào thanh ghi PSVPAG
_ mov #psvoffset(Table),W1 <<< ghi vị trí các số hạng vào W1 ???
_ mov W1, W2 <<< lấy vị trí đầu bảng ,em coi watch thì thấy vị trí này là 0x8200 ???
_ add W1,#(1082), W3 <<< lấy vị trí cuối bảng ,10*2 = 10 giá trị 2byte ??? em koi watch thì vị trí này là 0x8214 ???? 10 giá trị mà sao lại 0x8214 ??
_ #psvpage với #psvoffset em kiếm trong datasheet với cái 70157C mà ko thấy nói .Cái này do định nghĩa sẵn trong chip ah ???

Típ nữa ^_^ :
dòng:
_ mov [W1++], W0 <<< [] là lấy giá trị thứ W1 ,ghi vào W0 sau đó tăng giá trị W1 ??? ,em koi watch thì sau dòng lệnh này W1 từ 0x8200 -> 0x8202 (tăng 2 giá trị) ,W0 thì gán giá trị đầu tiên của Table .Sau đó W1 từ 0x8202 ->0x8204 (tăng 2 giá trị) ,W0 thì đc gán giá trị thứ 2 ,vậy ++ ở đây là tăng 2 giá trị àh ???

em mới học nên hem bit nhìu @_@ ,a giúp em hen ^_^ ,thanks a

thay đổi nội dung bởi: chukhivuitinh, 28-04-2008 lúc 01:59 AM.
chukhivuitinh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn