chào mọi người, mình làm về 8051 thì nhiều nhưng làm về AVR thì ít, dạo này gần đây có gặp 1 số vấn đề về kiểu biến, mong mọi người giúp đỡ, có thể có những câu hỏi hơi gà mờ
1. Mình làm cái I2C giao tiếp DS1307, sử dụng thư viện có sẵn của avr, trong các phím sét giờ có 3 phím SET Up Down, cái này chắc mọi người làm rồi cũng biết, nhưng vấn đề là giả sử phút đang là 3 mình muốn chuyển nó về 59, thì theo như lập trình sẽ là ấn Down cho giảm về 00 sau đó ấn tiếp nó sẽ nhảy sang 59, nhưng ko rõ do nguyên nhân gì mà nó ko thể sang 59 mà cứ chết ở 00 và mình đã chú ý từng dòng lệnh khi nó bien dịch file hex, biến min(phút) mình khai báo kiểu char(-127 to 127) khi biên dịch đoạn code là if(min<0) min=59; thì nó đưa ra cảnh báo, cái này là tại sao nhỉ, mình thay if(min==-1) min=59; vẫn đưa ra cảnh báo nằm ngoài rải giá trị kiểu biến char ,mặc dù giá trị biến nằm trong rải biến. và cũng chính vì cái cảnh báo này mà khi mình ấn down nó cứ chết ở 00. Mình đã khắc phục = cách dùng 1 biến trung gian dạng int để chuyển biến min sang thì được. Nhưng hi vọng mọi người giải thích giùm vấn đề này. Mình làm ở 8051 ko hề có lỗi này
2. Mình có làm cái lưu 1 giá trị bất kỳ vào eeprom ngoài, cụ thể là giờ báo thức sẽ đc ghi vào eeprom, giả sử mình ghi là cứ phút 15 thì chuông báo thức kêu, cái này chạy ngon, nhưng hễ ghi 0 phút là trên cái màn hình LCD khi mà nó đang 59 chuẩn bị nhảy nên 00 để đổi giờ khác thì nó cứ chết 59 tại chỗ
3. Ai có hàm giao tiếp I2C cho DS1307 sử dụng thư viện tự viết cho AVR có thể post cho mình xem được ko? tại chưa hiểu hết cái thanh ghi DDR, chỉ biết 1 là làm output và 0 là input, nhưng mà có lần mình sét DDR=0xff mà có cái button lắp trên 1 chân của Port đó nó vẫn đọc được trạng thái, mình nghĩ chỉ =0 nó mới đọc được chứ
1. Mình làm cái I2C giao tiếp DS1307, sử dụng thư viện có sẵn của avr, trong các phím sét giờ có 3 phím SET Up Down, cái này chắc mọi người làm rồi cũng biết, nhưng vấn đề là giả sử phút đang là 3 mình muốn chuyển nó về 59, thì theo như lập trình sẽ là ấn Down cho giảm về 00 sau đó ấn tiếp nó sẽ nhảy sang 59, nhưng ko rõ do nguyên nhân gì mà nó ko thể sang 59 mà cứ chết ở 00 và mình đã chú ý từng dòng lệnh khi nó bien dịch file hex, biến min(phút) mình khai báo kiểu char(-127 to 127) khi biên dịch đoạn code là if(min<0) min=59; thì nó đưa ra cảnh báo, cái này là tại sao nhỉ, mình thay if(min==-1) min=59; vẫn đưa ra cảnh báo nằm ngoài rải giá trị kiểu biến char ,mặc dù giá trị biến nằm trong rải biến. và cũng chính vì cái cảnh báo này mà khi mình ấn down nó cứ chết ở 00. Mình đã khắc phục = cách dùng 1 biến trung gian dạng int để chuyển biến min sang thì được. Nhưng hi vọng mọi người giải thích giùm vấn đề này. Mình làm ở 8051 ko hề có lỗi này
2. Mình có làm cái lưu 1 giá trị bất kỳ vào eeprom ngoài, cụ thể là giờ báo thức sẽ đc ghi vào eeprom, giả sử mình ghi là cứ phút 15 thì chuông báo thức kêu, cái này chạy ngon, nhưng hễ ghi 0 phút là trên cái màn hình LCD khi mà nó đang 59 chuẩn bị nhảy nên 00 để đổi giờ khác thì nó cứ chết 59 tại chỗ
3. Ai có hàm giao tiếp I2C cho DS1307 sử dụng thư viện tự viết cho AVR có thể post cho mình xem được ko? tại chưa hiểu hết cái thanh ghi DDR, chỉ biết 1 là làm output và 0 là input, nhưng mà có lần mình sét DDR=0xff mà có cái button lắp trên 1 chân của Port đó nó vẫn đọc được trạng thái, mình nghĩ chỉ =0 nó mới đọc được chứ
Comment